3011 |
Text |
Textbearbeitung |
Kategorie: | String |
Klasse: | schwer |
Eingabe: | siehe Spezifikation |
Ausgabe: | siehe Spezifikation |
|
Abzugebende Files: Text.txt, Text.java, *.java , 338.txt, 564.txt |
Kurzbeschreibung:
Ein String und eine Zahl, die als gewünschte Breite interpretiert wird, werden eingelesen;
der String wird entsprechend der Breite umgebrochen (abgetrennt und auf mehrere Zeilen verteilt).
Außerdem ist die Anzahl der vorkommenden Silben auszugeben.
Allgemeine Hinweise:
-
Sie haben Lösungen (und Spezifikationen) aus der 1. Runde von anderen Studenten erhalten,
die Ihnen Ihre Aufgabe erleichtern sollen. Wählen Sie eine Lösung aus, die Ihnen hinsichtlich Lesbarkeit, Programmierstil,
Korrektheit und Verwendbarkeit am besten erscheint. Verwenden Sie
diese Lösung in Ihrem Programm. Sie können auch die anderen Lösungen einsetzen.
- 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 <number>.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 Text.java muß aber die Methode main enthalten. Weiters müssen alle abgegebenen Klassenfiles in demselben Verzeichnis vorliegen, Pfadangaben sind nicht gestattet.
-
Achten Sie auf die korrekten Konventionen der Groß/Kleinschreibung bei
Klassen und Methoden!
[Wir tun das jetzt auch :-)]
-
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.3.1_1) 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!
Aufgabenstellung:
Lesen Sie zuerst einen String ein, der nur aus Buchstaben und den Sonderzeichen ',' und '"'
(Komma und Anführungszeichen) bestehen darf (Achtung: das
einfache Hochkomma ist Teil dieses Textes, darf aber im String nicht vorkommen; es handelt sich um ein metasprachliches Symbol).
Sehen Sie den String als eine Kette von Wörtern, die durch Kommas getrennt
sind.
Danach wird eine Zahl eingelesen, die die gewünschte Zeilenbreite angibt. Der
String soll nun so abgeteilt werden, daß diese Zeilenbreite nicht überschritten wird.
Die Abtrennung erfolgt entweder NACH einem Komma oder in einem
Wort, wobei die unten aufgeführten Silbentrennungsregeln einzuhalten sind. Es
soll immer so weit hinten wie möglich abgetrennt werden.
Wenn im Wort mittels Silbentrennung abgeteilt wird, so ist an der entsprechenden Stelle
ein Bindestrich einzufügen; dieser muß aber auch noch in die Zeile
passen!
Das Anführungszeichen '"' hat eine spezielle Bedeutung: Textteile, die
zwischen zwei Anführungszeichen stehen, dürfen nicht abgeteilt werden, sondern
müssen in einer Zeile stehen. Diese Anführungszeichen sollen in der Ausgabe
nicht erscheinen.
Wenn innerhalb der Anführungszeichen zwei Anführungszeichen direkt hintereinander stehen, dann soll in der Ausgabe an dieser Stelle EIN Anführungszeichen stehen. In diesem Fall ist der 'trenngeschützte' Textteil noch nicht
abgeschlossen; erst das nächste (nichtverdoppelte) Anführungszeichen beendet
diesen Modus. (z.B. "Hallo,""Welt""" -> Hallo,"Welt")
Zum Schluß soll Ihr Programm die Anzahl der Silben im String ausgeben.
Hier nun die Regeln für die Silbentrennung (diese entsprechen nicht der
deutschen Silbentrennung):
Betrachten Sie zwei aufeinanderfolgende Buchstaben als Silbe.
Wenn eine Silbe aus zwei Konsonanten (Mitlauten) bestehen würde, geben Sie den
ersten Buchstaben zur davorliegenden Silbe und betrachten Sie den zweiten
Buchstaben als ersten der nachfolgenden Silbe (wenn diese wieder aus zwei
Konsonanten bestehen würde, wiederholt sich das Spielchen).
Wenn jedoch schon die erste Silbe des Wortes nur aus Konsonanten bestehen
würde, so sollen Sie solange weitere Buchstaben an die Silbe anhängen, bis ein
Vokal dazukommt (z.B. Stra-te-gie). Wörter ohne Vokale sind unzulässig.
Die Buchstabenkombinationen "ei" und "ie" sind niemals zu trennen, sondern der
vorangehenden Silbe dazuzugeben.
Wenn am Wortende nach der Silbentrennung ein einzelner Buchstabe überbleibt,
dann geben Sie ihn zur letzten Silbe dazu.
Eingabedaten:
Lesen Sie den String ein, der nur aus den oben genannten Zeichen bestehen
darf. Dieser darf nicht länger als 120 Zeichen sein.
Danach lesen Sie die Zeilenbreite als Integer-Zahl ein.
Folgende zusätzliche Regeln müssen eingehalten sein, damit der Eingabedatensatz zulässig ist:
Ein Wort darf höchstens 15 Zeichen lang sein.
Großbuchstaben dürfen nur am Anfang eines Wortes vorkommen.
Die Breite muß größer als 1/3 der Stringlänge sein und darf diese nicht übersteigen. Außerdem muß die Breite im Bereich von 3 bis 55 liegen.
Nach den oben genannten Regeln muß eine Abteilung möglich sein; nicht abtrennbare Teile (untrennbare Wörter oder Teile in Anführungszeichen), die länger
als die Breite sind, sind unzulässig.
Anführungszeichen dürfen nur am Anfang und Ende von Wörtern auftreten; jedes
geöffnete Anführungszeichen muß auch wieder geschlossen werden.
Ausgabedaten:
Bei korrekten Eingabedatensätzen soll Ihr Programm die durch die Abteilung
erzeugten Zeilen ausgeben, getrennt durch Zeilenvorschübe.
Danach geben Sie in einer eigenen Zeile die Gesamtanzahl der Silben im String
aus, gefolgt von einem Zeilenvorschub.
Fehlerbehandlung:
Sämtliche Eingabedatensätze sind immer bis zum definierten Endezeichen einzulesen.
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 Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.
Waren die Datentypen bei allen Eingaben richtig, die eingegebenen Daten dann aber inhaltlich nicht korrekt (z.B. Breite nicht im zulässigen Bereich), so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.
Beispiele:
Eingabedaten
|
"Hilfe,Hilfe",Uebungsaufgabe 15
Das,ist,ein,Test 6
Hasenfuss,Biegsamkeit 8
|
Ausgabedaten
|
Hilfe,Hilfe,Ue-
bungsaufgabe
10
Das,
ist,
ein,
Test
4
Hasen-
fuss,
Biegsam-
keit
6
|
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 Text < Text.i1 > Text.out1
Das erzeugte File Text.out1 können Sie dann mit dem mitgelieferten Outputfile Text.o1 vergleichen.