Beispiel Angabe

Kürzel:asciishop-A01-pp
Name:AsciiShop, Runde#1
Kette:Asciishop PP
Kategorie:Bildverarbeitung

Mitgelieferte Datei(en):
Abzugebende Datei(en): AsciiShop.java
Optional abzugebende Datei(en):
Ausführbar: AsciiShop

Die Klasse AsciiShop ist zu erstellen und soll eine ausführbare Klasse sein und muss daher die public static void main(String[] args) Methode beinhalten. Ihr Programm wird automatisch auf Korrektheit überprüft. Die Überprüfung erfolgt durch die Ausführung der als ausführbar bezeichneten Klasse (AsciiShop).

Kurzbeschreibung:

Das Programm soll ein ASCII-Bild zeilenweise von der Standardeingabe einlesen und überprüfen, ob alle Zeilen gleich lang sind. Nach dem Einlesen wird die Höhe und die Breite des Bildes (sprich Länge und Anzahl der Zeilen) ausgegeben. Sollte die Eingabe fehlerhaft sein, so wird stattdessen eine Fehlermeldung ausgegeben.

Lernziele

Aufgabenstellung Klassen und Methoden Ein- und Ausgabedaten Bewertung und Kriterien
Hinweise FAQ Fehlerbehandlung Testen

 

Aufgabenstellung:

Bei einem ASCII-Bild werden die unterschiedlichen Helligkeitswerte (Pixel) eines Graustufenbildes durch ASCII-Zeichen dargestellt. Dies war vor der Einführung von grafikfähigen Computern die einzige Darstellungsmöglichkeit von bildähnlichen Objekten und hält sich bis heute in E-Mail Signaturen und den bekannten Emoticons.


.........................................
.....!\_________________________/!\......
.....!!.........................!!.\.....
.....!!.........................!!..\....
.....!!.........................!!..!....
.....!!..........EPROG..........!!..!....
.....!!.........................!!..!....
.....!!.........................!!..!....
.....!!.........................!!..!....
.....!!.........................!!../....
.....!!_________________________!!./.....
.....!/_________________________\!/......
........__\_________________/__/!_.......
.......!_______________________!/.)......
.....________________________....(__.....
..../oooo..oooo..oooo..oooo./!..._..)_...
.../ooooooooooooooooooooooo/./..(_)_(_)..
../ooooooooooooooooooooooo/./....(o.o)...
./C=_____________________/_/....==\o/==..
.........................................
Ein Beispiel für ein ASCII-Bild

Das Programm soll ein solches Bild zeilenweise von der Standardeingabe einlesen. Lassen Sie Ihr Programm solange Bildzeilen einlesen, bis das Ende der Eingabe erreicht ist. Zählen Sie dabei mit, wie viele Zeilen bereits eingelesen wurden und überprüfen Sie weiters, ob jede neu eingelesene Zeile gleich lang wie die bisher eingelesenen ist. Ist eine Zeile länger oder kürzer, so wird das Einlesen abgebrochen und "INPUT MISMATCH" in einer eigenen Zeile über die Standardausgabe ausgegeben. Sind alle Zeilen gleich lang, so wird nach Einlesen der letzten Zeile die Breite und Höhe des eingelesen ASCII-Bildes in einer Zeile über die Standardausgabe ausgegeben.

 

Klassen und Methoden

AsciiShop
Diese Klasse verarbeitet die Eingaben und verifiziert ob diese korrekt sind
public static void main(String[] args)
ist die einzige in dieser Runde zu implementierende Methode und führt die gesamte Programmlogik entsprechend der Aufgabenstellung aus.

 

Allgemeine Hinweise:

 

Hinweise:

Beachten Sie die allgemeinen Hinweise zur Installation und zur Ein-/Ausgabe, sowie zur Abgabe und zur Beurteilung in den FAQ. Beispiele zum Umgang mit Ein-/Ausgabe sowie den Methoden der Klasse String finden Sie im Skriptum oder in den Vorlesungsfolien.

Einlesen des Bildes

Verwenden Sie zum Einlesen des Bildes von der Standardeingabe die Klasse Scanner. Relevant sind insbesondere die Methoden next und hasNext bzw. nextLine und hasNextLine.

Zeilenlänge

Zum Bestimmen der Zeilenlänge bietet die Klasse String die Methode length.

Ausgabe

Für die Ausgabe über die Standardausgabe verwenden Sie die Methoden System.out.print und System.out.println.

Testen

Es gibt zwei Möglichkeiten Ihr Programm zu testen: Sie können einerseits Eingaben in der Console vornehmen - entweder per direkter Eingabe oder auch per Einfügen von der Zwischenablage. Um die Eingaben in der Console abzuschließen, geben Sie einen Zeilenumbruch gefolgt vom EOF-Zeichen (Tastenkombination Strg+Z (Windows) bzw. Strg+D (Mac, Linux)) ein. Das EOF-Zeichen muss dabei am Anfang einer Zeile stehen, geben Sie also beispielsweise nach der letzten Bildzeile Enter und dann Strg+Z/Strg+D ein.
Andererseits können Sie den Inhalt einer Datei als Eingabe verwenden: java MyProgram < input.txt > output.txt. Hierbei wird der Inhalt der Datei input.txt gelesen und als Eingabe an MyProgram weitergereicht. Die gesamte Ausgabe wird in die Datei output.txt geschrieben.

Nicht-Funktionale Anforderungen

Im Rahmen des Abschlussgesprächs wird die Abgabe nach Kriterien wie Dokumentation (sprich Kommentare), Übersichtlichkeit des Codes, Verständnis, etc. beurteilt.

Wenn Sie Fragen zur Implementierung oder auch zu Java haben, können Sie das Informatik-Forum nutzen. Im Rahmen der wöchentlichen Laborien stehen Tutoren für Fragen zur Verfügung.
Informatik-Forum Laborien

 

Eingabedaten:

Ein ASCII-Bild mit beliebig vielen Zeichen, wobei Sie davon ausgehen dürfen, dass das Bild keine Leerzeichen enthält.

Ausgabedaten:

Die Breite und Höhe des ASCII-Bildes in einer Zeile durch ein Leerzeichen getrennt.

Fehlerbehandlung:

Geben Sie "INPUT MISMATCH" aus, falls das Bild der Anforderung widerspricht und nicht alle Zeilen gleich lang sind.

Testen:


In
.........................................
.....!\_________________________/!\......
.....!!.........................!!.\.....
.....!!.........................!!..\....
.....!!.........................!!..!....
.....!!..........EPROG..........!!..!....
.....!!.........................!!..!....
..............!!..!....
.....!!.........................!!..!....
.....!!.........................!!../....
.....!!_________________________!!./.....
.....!/_________________________\!/......
........__\_________________/__/!_.......
.......!_______________________!/.)......
.....________________________....(__.....
..../oooo..oooo..oooo..oooo./!..._..)_...
.../ooooooooooooooooooooooo/./..(_)_(_)..
../ooooooooooooooooooooooo/./....(o.o)...
./C=_____________________/_/....==\o/==..
.........................................
Out
INPUT MISMATCH
Beschreibung In Zeile 8 befinden sich zu wenig Zeichen


In
.........................................
.....!\_________________________/!\......
.....!!.........................!!.\.....
.....!!.........................!!..\....
.....!!.........................!!..!....
.....!!..........EPROG..........!!..!....
.....!!.........................!!..!....
.....!!.........................!!..!....
.....!!.........................!!..!....
.....!!.........................!!../....
.....!!_________________________!!./.....
.....!/_________________________\!/......
........__\_________________/__/!_.......
.......!_______________________!/.)......
.....________________________....(__.....
..../oooo..oooo..oooo..oooo./!..._..)_...
.../ooooooooooooooooooooooo/./..(_)_(_)..
../ooooooooooooooooooooooo/./....(o.o)...
./C=_____________________/_/....==\o/==..
.........................................
Out
41 20
Beschreibung Ein gültiges ASCII-Bild der Größe 41x20


In
======================.;+I.:======================
====================;,.###,.;=====================
====================,=;####..:====================
===================;.=##W##Y+.;===================
===================.:t##MM##X..===================
==================:.###MMM##MM.;==================
=================;,;##WWMM####.,;=================
================;..###WWWWWM##M,,;================
================,:;##WMWMWWWW##..,================
================.XW#WWWWWWBWWW#WW.;===============
===============:.B##WW#WWWWWMMW##..;==============
===============.Y##WWWMWWMWWW#M###.:==============
==============:.###WWWWWMWWWMMMW##.,:=============
=============:,.##WWMMWMWWMWWWBMW#i=.=============
=============.t##WWW#######WW#WMM##V.:============
============:.=##WW############MMB#Bt.============
============.IX#MW##Y=.iiiitVB###W###.;===========
============.W##M##W....;YIii+t######.,;==========
===========:.####MV,...BtiYYYI=YY#..t#=:==========
==========;.Y##Y#BRIXRVIYVIIIIiYI#...#..;=========
==========:.#i..MXB+IIIXXXVRXX+XR#...#=:,=========
=========:,.#...X##,+IRMRXXXXY,###...t#Y..;=======
========,.;R#....M##VIX+IYIIYR###.....###..,;=====
======;..W##.....,i####RRR#####:,..,..XM##X;.,====
====;...+###.......,IB#####MVi....,,,.=I##XV#..,==
=;,..=####MV..,,......;;it;=.....,,,,..+#W;.V##..:
:.:X##..##I..,,..................,,,,,..#+....Y#:.
.=##t...i#t..,,.,..........,,,,,,.,..:.,Y#=.=:..#Y
:#t..::.i#i........,,..,,,.:,,,,,,,,,,...#+.=,..#i
.##+.::,#t:....,...,,,,.,,.:,.,,,,..,,,,.#;...:##;
.i##R...#....,..,..,,,.,,,.....,,,.,,,,,.#=..###..
,.W##..,#.........,...,,,,,,,,,...,,.,,:.V####X..=
=,.i#####...,,,.,...,,,,,,.,,,:,,,,,,,,,.,M##MY.;=
=;.;I###i..,,,...,,,..,.,,,,..,..,.,,.,,..B##MY.;=
;,.:Y###...,,,.,....,,.,..,.,,.,,.,,,,,,..X###W.,=
,:iB####...,,,.,.,,...,.,,,,,,....:,,,,,:.IB##MY.;
,####W##...,,,...........,,,,,,,,,.,,.,,,.tR####.;
:#######...,,..,.................:.,:,,,:.tR####.+
..X##t##...,.........;=VXXR=......:,.,,,:.Y###Wi.;
=:....##........;X#############t,...,,,,..M#....:=
=====.##M.....i###Vi.........+V##W...,,,..##.:;===
=====.=i#...####...,:======;:,..t##t.....BXB.=====
=====;,,#####:..,;============;:..B##...,#i.:=====
======;,......;==================:..t####+,:======
Out
50 44
Beschreibung Ein gültiges ASCII-Bild der Größe 50x44


Bemerkung: 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 AsciiShop < asciishop-A01-pp.i1 > asciishop-A01-pp.out1

Das erzeugte File asciishop-A01-pp.out1 können Sie dann mit dem mitgelieferten Outputfile asciishop-A01-pp.o1 vergleichen.