Klasse: mittel KURZBESCHREIBUNG Auf einem Feld fliegen Körper in eine gegebene Richtung. Ihr Programm liest eine Momentaufnahme der Körper ein und berechnet die Richtungsänderung. Dabei soll eine Reflexions- und Kollisionsberechnung durchgeführt werden. ALLGEMEINE HINWEISE Das Beispiel dieser Runde ist objektorientiert und als package zu lösen. Nachdem Sie das Programm mittels Dialogprogramm abgegeben haben, gehen Sie zu einem Tutor. Der Tutor überprüft, ob Sie Ihr Programm spezifikationsgemäß programmiert haben. Unmittelbar nach der erfolgreichen Abgabe am Dialogprogramm können sie bereits die nächste Runde abholen. Sie haben Lösungen (und Spezifikationen) aus der 3. Runde von anderen Studenten erhalten. Testen Sie alle mitgelieferten Lösungen und wählen Sie eine Lösung aus, die Ihnen hinsichtlich Lesbarkeit, Programmierstil, Korrektheit und Verwendbarkeit am besten erscheint. Merken Sie sich die Lösungsnummer des ausgewählten Beispieles für die Abgabe. Diese Nummer müssen Sie bei der Abgabe angeben. Geben Sie nur jene Lösungsnummer an, die Sie auch wirklich ausgewählt haben. Erstellen Sie für alle Lösungen zu diesem Beispiel (siehe: "Abzugebende Files") ein File mit dem Namen .txt. und schreiben in dieses File ein Review (=Kritik) zu der Lösung. Diese Reviews erhalten dann die TeilnehmerIn von dem/der die Lösung stammt. Beachten Sie das bitte bei der Form Ihrer Kritik. Sie können für die Lösung der gewählten Aufgabe eine oder mehrere Klassen programmieren. Die Klasse Main.java muß aber die Methode main enthalten. Weiters müssen alle anderen abgegebenen Klassenfiles in Verzeichnis html vorliegen, Pfadangaben sind nicht gestattet. Achten Sie auf die korrekten Konventionen der Groß/Kleinschreibung bei Klassen und Methoden! Falls Ihre Lösung einen Exit Code zurueckliefert, so achten Sie darauf, dass dieser den Wert 0 hat. Bei allen anderen Werten können Probleme bei der Bewertung und in weiterer Folge unbeabsichtigte Punkteabzüge auftreten. Ihre Lösung darf nur genau jene Ausgabedaten liefern, die in der Spezifikation verlangt werden. Die Ausgaben Ihrer Lösung werden automatisch mit Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen! Testen Sie Ihre Lösung vor der Abgabe mit der mitgelieferten Eingabedatei. Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihrer Lösung mit der ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihre Lösung auch mit anderen Eingabedaten. Verwenden Sie nur das von uns mitgelieferten Package eprog für Ihre Ein/Ausgaben. Klassen, die Packages oder Klassen ausserhalb der verwendeten Übungsumgebung (Java2, Standard Edition, Version 1.5.0) verwenden, können von uns nicht getestet werden und werden daher mit 0 Punkten bewertet! Schreiben Sie Ihre Klasse(n) möglichst allgemein und kommentieren Sie diese gut. Erstellen Sie weiters eine übersichtliche und verständliche Dokumentation. Damit erhöhen Sie Ihre Chancen, daß andere Studenten in der nächsten Runde Ihre Lösung wählen und Ihnen damit zu Zusatzpunkten verhelfen! AUFGABENBESCHREIBUNG Auf einem 100 x 100 großen Feld befinden sich mehrere Körper mit den Koordinaten x,y. Die Körper bewegt sich mit konstanter Geschwindigkeit in eine Richtung. Diese Translation ist bestimmt durch einen Winkel a, gegeben in Grad. Befindet sich der Körper genau auf den Grenzen des Feldes und bewegt er sich weiter in diese Richtung, so ändert sich der Winkel nach den Reflexionsgesetzen. Dieses lautet Einfallswinkel = Ausfallswinkel. Allerdings ist die Berechnung an jeder Kante anders. [Bild zu Reflexionsgesetz] Sind zwei Körper auf der selben Koordinate, so stoßen sie sich gegenseitig ab. Die Körper fliegen dann in die entgegengesetze Richtung. Findet beides gleichzeitig statt, dann gelten die Reflexionsgesetze. In diesem Fall ist das Abstoßen zu ignorieren. Das Grenzen des Koordinatensystem ist wie folgt definiert: links unten (Ursprung): Koordinaten 0,0 rechts unten: Koordinaten 100,0 links oben: Koordinaten 0,100 rechts oben: Koordinaten 100,100. Der Körper fliegt bei diesen Winkeln folgendermaßen: Winkel 0 Grad: nach rechts Winkel 90 Grad: nach oben. Winkel 180 Grad: nach links Winkel 270 Grad: nach unten Winkel 360 Grad: wieder nach rechts Alle anderen Zwischenwerte mit der Genauigkeit von Float sind auch möglich. EINGABEDATEN Es sollen eine Liste von je 3 Floatwerten eingelesen werden. Die einzelne Floatwerte sollen durch Beistrich getrennt werden. Diese sollen als 2 Koordinaten und ein Winkel interpretiert werden. Die Reihenfolge ist also x,y und dann a für jeden einzelnen Körper. x,y sind im Intervall [0,100] (inklusive der Grenzen) und der Winkel von 0 bis 360 Grad (inklusive 0, exklusive 360) zu erwarten. Hingegen die Eingaben von den einzelnen Körpern sollen durch Leerzeichen oder Enter getrennt werden. Das Ende der Liste wird durch ENDE gefolgt von einem Leerzeichen signalisiert werden. Die maximale Anzahl der Körper ist 10. AUSGABEDATEN Auzugeben sind nur die Winkeln in der gleichen Reihenfolge wie die Körper eingelesen wurden. Dabei soll der Floatwert auf 3 Stellen genau ausgegeben werden. Die einzelnen Werte sind durch Leerzeichen getrennt, der letze Wert gefolgt von einer Leerzeile auszugeben. Der Winkel ist wie die Eingabe in Grad anzugeben. Das Intervall geht von 0 bis 360 Grad (inklusive 0, exklusive 360). FEHLERBEHANDLUNG Liegt eine Koordinate außerhalb des Feldes, so ist "NICHT IM FELD" gefolgt von einer Leerzeile auszugeben. Kann die eine Eingabe nicht als float Wert interpretiert werden oder liegt ein anderer Fehler vor, so soll "FALSCHE EINGABE" gefolgt von einer Leerzeile ausgegeben werden. Es soll aber auf jeden Fall die Eingabe fertig eingelesen werden, und erst dann die Meldung ausgegeben werden. In diesem Fall ist keine Berechnung durchzuführen. Wenn mehr als 10 Körper eingelesen werden, so ist "ZU VIEL", gefolgt von einer Leerzeile auszugeben und das Einlesen ist abzubrechen. BEISPIELE Im ersten Beispiel gibt es 3 Körper. Sie liegen alle innerhalb des Feldes und haben alle gültige Winkel. Eingabe: 50,20,23.3 20.2,30.4,132.92 30,40,90 ENDE Ausgabe: 23.300 132.920 90.000 Im zweiten Beispiel sind es 2 Körper. Die Eingaben sind gültig, aber es gibt eine Kollision und eine Reflexion. Eingabe: 30,100,23.3 50,50,90 50,50,180 ENDE Ausgabe: 293.300 180.000 90.000 Im dritten Beispiel liegt der eine Körper nicht im Feld. Eingabe: 300,20,234 ENDE Ausgabe: NICHT IM FELD TESTEN Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen: java Main < html.i1 > html.out1 Das erzeugte File html.out1 können Sie dann mit dem mitgelieferten Outputfile html.o1 vergleichen.
Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif