EPROG-LU - Aufgabe 4105 (Ueberdeckungen berechnen)
4105 intersec Ueberdeckungen berechnen
Kategorie:Graphik
Klasse:leicht
Eingabe:Siehe Spezifikation
Ausgabe:Siehe Spezifikation
Abzugebende Files: intersec.txt, Main.java, intersec/*.java , 10525.txt, 10789.txt

Kurzbeschreibung:

Schreiben Sie eine Klasse Intersection, die einfache geometrische Objekte einliest, und diese auf Überdeckungen überprüft.

Allgemeine Hinweise:

Aufgabenstellung:

Ein String, der einfache geometrische Objekte wie Rechtecke und Kreise enthält soll eingelesen werden.

Rechtecke können durch die Angabe von 2 Koordinatenpunkte (x1,y1) und (x2,y2) in der Form R(x1,y1;x2,y2) eingeben werden, wobei die 2 Punkte den linken unteren bzw. rechten oberen Eckpunkt des Rechteckes darstellt. Die Seiten des Rechteckes seien achsenparallel und für die Punkte muß folgende Bedingung gelten: x1<x2, y1<y2.

Rechtecke können aber auch durch den linken unteren Eckpunkt und die Angabe der beiden Seiten a und b definiert werden, wobei die Seite a wiederum parallel der x-Achse und die Seite b parallel der y-Achse verläuft. Die Eingabe hat dann die Form R(x1,y1,a,b).

Bei einem Quadrat reicht allerdings die Eingabe einer einzigen Seite in der Form R(x1,y1,a), wobei x1,y1 den linken unteren Eckpunkt darstellt.

Kreise werden als K(x1,y1;r) eingegeben wobei (x1,y1) den Mittelpunkt und r den Radius definiert, oder auch durch die Angabe eines den Kreis umschreibenden Quadrat K(x1,y1,a); x1 und y1 sind der linke untere Eckpunkt und a ist die Seitenlänge des Quadrats.

Jedem Objekt soll eine eindeutige Objektnummer zugeordnet sein.

Schreiben Sie eine Routine welche zwei geometrische Objekte miteinander vergleicht. Der Vergleich zweier Objekte sei definiert durch a<b gdw. Objekt a innerhalb vom Objekt b liegt, wobei Berührungen der Objektgrenzen gestattet sind. Desweiteren gilt a<<b gdw. Objekt a innerhalb vom Objekt b liegt, wobei in diesem Fall keine Berührungen an den Objektgrenzen existieren dürfen.

Genauere Informationen zur Ausgabe entnehmen Sie bitte dem Abschnitt "Ausgabedaten".

Eingabedaten:

Lesen Sie zuerst alle Objekte in Form von Strings ein. Jedes Objekt muß mit dem Buchstaben "R" oder "K" beginnen, die Form der Eingabe von Rechtecken und Kreisen wurde in der Aufgabenstellung bereits definiert.

Sämtliche Zahlenangaben müssen ganzzahlig und Zahlen vom Typ Short sein, zusätzlich müssen Seitenlängen/Radius positiv und größer 0 sein.

Jedem Objekt soll eine eindeutige und fortlaufende Objektnummer zugeordnet werden, diese ist selbstverständlich ebenfalls ganzzahlig und beginnt mit 1 für das erste Objekt.

Der abschließende String stellt die Abfrage dar, dieser besteht entweder nur aus dem Zeichen "?", oder aus 2 Objektnummern getrennt durch einen der beiden Vergleichsoperatoren "<" oder "<<". Zu den Objektnummern müßen auch Objekte existieren.

Die einzelnen Strings sind im Eingabedatensatz durch Leerzeichen getrennt.

Ausgabedaten:

Bei korrekten Eingabesätzen soll Ihr Programm das Resultat der Berechnung wie folgt ausgeben. Die gefundenen Objektgruppen werden im Ausgabestring nach Anzahl der Objekten absteigend sortiert und durch ein Leerzeichen getrennt ausgegeben, innerhalb einer Gruppe sollen die Objekte nach den Nummern aufsteigend sortiert und durch ein Bindestrich getrennt sein.

Geben Sie immer nur die Objektnummern sowie die Trennzeichen aus. Ist die Anzahl der Objekte bei 2 Gruppen identisch, so soll hier noch zusätzlich nach Objektnummer aufsteigend sortiert werden.

Falls keine Überdeckung existiert, so geben Sie 0 aus.

Bei Vergleichsoperatoren geben Sie das entweder "TRUE" oder "FALSE" aus.

Schließen Sie die Ausgabe mit einem Zeilenvorschub ab.

Fehlerbehandlung:

Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.

Enthält der Eingabedatensatz einen ungültigen numerischen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.

Wenn dann der Eingabestring nicht den Bedingungen genügt, so soll Ihr Programm die Fehlermeldung "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
R(0,0;2,2) R(2,0,1) R(4,0,1,2) R(4,2;5,3) R(4,1,1,1) K(1,0,2) K(5,3;1) ?

R(0,0;3,3) K(1,1;1) 2<1

Ausgabedaten
1-2-6 3-5 4-7

TRUE


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 < intersec.i1 > intersec.out1

Das erzeugte File intersec.out1 können Sie dann mit dem mitgelieferten Outputfile intersec.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