Seite 1 von 2

toDecimal - nicht zulässige Eingaben

Verfasst: 2. Nov 2011 19:50
von mrzb6
Hey,

nachdem bei mir zahlreiche Stunden Arbeit in diverse toDecimal-Prozeduren geflossen sind (von denen keine 100% überzeugen konnte), wollte ich mal fragen, wie penibel unzulässige Eingaben gefunden werden sollen:
  • CMM entspricht 900+1000=1900 statt 1000+900=1900. MCM wäre richtig, aus den drei Regeln im Praktikums-PDF lässt sich aber nicht ableiten, dass CMM falsch wäre.
    IVI ist eine "schmutzige" Darstellung von 5. Wiederum gilt, dass V richtig wäre, aus dem PDF aber nicht hervorgeht, dass IVI falsch wäre.
Nachdem vor allem IVI mich auf die Palme gebracht hat (stirb, IVI :evil:), ist jetzt die Frage, ob solche Fälle überhaupt abgefangen werden sollen.
Was meint Ihr?

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 2. Nov 2011 19:56
von zimpfer
In der Aufgabenstellung steht:
Bzgl. der Prüfung der Eingabe
reicht es hier, wenn Sie zu Beginn prüfen, ob alle Zeichen der Eingabe aus der Menge der zulässigen Zeichen
stammen und während der Konvertierung einen Fehler ausgeben, wenn ein Fall auftritt, den ihr Code nicht kon-
vertieren kann.
Die genannten Fehler müssen also nicht abgefangen werden, nur illegale Zeichen müssen erkannt und abgefangen werden.


Ursprünglich war auch eine 100%ige syntaktische Prüfung gedacht, aber diese ist in Assembler nicht einfach und wurde weggelassen.

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 2. Nov 2011 20:15
von mrzb6
Okay, vielen Dank.

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 3. Nov 2011 06:43
von nein23
hallo, ich hatte mir zuerst garkeine gedanken zur überprüfung gemacht, da ich erstmal eine lauffähige konvertireung haben wollte. allerdings viel mir danach auf dass mein algorithmus eine komplette syntaktische überprüfung beinhaltet. nun stelle ich mir die frage, da in der aufgabenstellung steht dass man "zu Beginn" überprüfen soll, ob das ok ist. denn bei mir wird die syntaktische korrektheit stets wärend der konvertierung überprüft, allerdings nich zu beginn.

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 3. Nov 2011 08:22
von zimpfer
nein23 hat geschrieben:hallo, ich hatte mir zuerst garkeine gedanken zur überprüfung gemacht, da ich erstmal eine lauffähige konvertireung haben wollte. allerdings viel mir danach auf dass mein algorithmus eine komplette syntaktische überprüfung beinhaltet. nun stelle ich mir die frage, da in der aufgabenstellung steht dass man "zu Beginn" überprüfen soll, ob das ok ist. denn bei mir wird die syntaktische korrektheit stets wärend der konvertierung überprüft, allerdings nich zu beginn.
Das ist natürlich auch in Ordnung.

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 3. Nov 2011 19:09
von kbraden
Es ist nicht zulässig auf ein Subtraktionspaar ein einzelnes Zeichen folgen zu lassen, das eine höhere Wertigkeit als der linke Teil des Subtraktionspaars hat. Bspw. ist XCLIII (90 + 50 + 3) als Darstellung von 143 nicht erlaubt, da L einen höheren Wert als X hat. Die korrekte Darstellung von 143 ist CXLIII (100+40+3).
Versteh ich das jetzt richtig, dass das bei toDecimal auch nicht abgefangen werden muss?

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 3. Nov 2011 19:15
von zimpfer
kbraden hat geschrieben:
Es ist nicht zulässig auf ein Subtraktionspaar ein einzelnes Zeichen folgen zu lassen, das eine höhere Wertigkeit als der linke Teil des Subtraktionspaars hat. Bspw. ist XCLIII (90 + 50 + 3) als Darstellung von 143 nicht erlaubt, da L einen höheren Wert als X hat. Die korrekte Darstellung von 143 ist CXLIII (100+40+3).
Versteh ich das jetzt richtig, dass das bei toDecimal auch nicht abgefangen werden muss?
Bei toRoman sollen illegale Zahlen abgefangen werden, bei toDecimal müssen nur illegale Zeichen abgefangen werden.

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 6. Nov 2011 20:08
von nein23
wäre 12b34c6 dann eine illegale zahl oder sind damit nur zahlen >=4000 gemeint?

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 6. Nov 2011 21:56
von zimpfer
nein23 hat geschrieben:wäre 12b34c6 dann eine illegale zahl oder sind damit nur zahlen >=4000 gemeint?
Solche Eingaben werden vom vorgegebenen scanf abgefangen, scanf würde in diesem Fall nur 12 speichern und den Rest ignorieren.

Das muss nicht abgefangen werden, eine Wertebereichsprüfung reicht.

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 7. Nov 2011 16:41
von Uhr
Ich muss jetzt noch mal konkret nachfragen, da die Tutoren sich scheinbar auch nicht ganz sicher sind bzw. die Aufgabe ursprünglich wohl anders interpretiert hatten. Daher ein einfaches Beispiel:

IIV

Nach der Beschreibung der römischen Regeln natürlich nicht korrekt, da zwei kleinere Zeichen links von V stehen. Wenn wir aber davon ausgehen, dass nur falsche Zeichen abgefangen werden sollen, ergibt sich bei uns als Ausgabe schlicht 5, durch die Rechnung 1+4. Ist das so gedacht oder sollte in einem solchen Fall ein Fehler ausgegeben werden?

Der Grund für die Unsicherheit ist, dass in der Aufgabe ja steht, dass wir einen Fehler ausgeben sollen, wenn unser Programm die Eingabe nicht verarbeiten kann. Und zwar nachdem wir die Zeichen schon überprüft haben. Ohne die erzwungene Einhaltung korrekter Regeln kann das allerdings gar nicht passieren.

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 7. Nov 2011 19:13
von mike
Hi,

also ich denke der Satz "Eingabe nicht verarbeiten" gilt nur für ungültige Zeichen, weil er kann ja mit IIX die Eingabe verarbeiten, nur stimmt diese nicht mit einer Regel überein. Es kann aber eine Zahl berechnet werden die je nach Interpretation, Regel sogar stimmt.


Gruß
Mike

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 7. Nov 2011 20:22
von mw1039
Die Aufgabenstellung sagt ja
Bzgl. der Prüfung der Eingabe reicht es hier, wenn Sie zu Beginn prüfen, ob alle Zeichen der Eingabe aus der Menge der zulässigen Zeichen stammen...
Das ist so zu verstehen, dass ihr z.B. bei Q32IV eine Fehlermeldung ausgeben sollt. Abgesehen vond er Pruefung nicht zulaessiger Zeichen enthalten die Testcases der Tutoren aber nur gueltige roemische Zahlen.

Das gilt aber ausdruecklich nur fuer die Richtung roman->decimal. Fuer decimal->roman sollt ihr bei allen denkbaren falschen Eingaben einen Fehler ausgeben. Also z.B. bei "Q32IV" und bei "4000".

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 7. Nov 2011 21:23
von radix89
mw1039 hat geschrieben:Das gilt aber ausdruecklich nur fuer die Richtung roman->decimal. Fuer decimal->roman sollt ihr bei allen denkbaren falschen Eingaben einen Fehler ausgeben. Also z.B. bei "Q32IV" und bei "4000".
Wie soll ich das denn bei der toRoman prüfen, im Template steht doch schon ganz am Anfang Dezimalzahl einlesen.
Dann gehe ich doch davon aus, dass eine Dezimalzahl eingelesen wird und danach in Input steht.

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 8. Nov 2011 13:35
von XT-19
Wie schaut es mit der Antwort aus? Es würde mich mal sehr interessieren, was die Tutoren dazu sagen.
Cheers,
XT

Re: toDecimal - nicht zulässige Eingaben

Verfasst: 8. Nov 2011 14:31
von michi21
Mich würde die Antwort auch mal interessieren, vor allem, da teilweise unterschiedliche Antworten gegeben werden:
mw1039 hat geschrieben:Das gilt aber ausdruecklich nur fuer die Richtung roman->decimal. Fuer decimal->roman sollt ihr bei allen denkbaren falschen Eingaben einen Fehler ausgeben. Also z.B. bei "Q32IV" und bei "4000".
zimpfer hat geschrieben:
nein23 hat geschrieben:wäre 12b34c6 dann eine illegale zahl oder sind damit nur zahlen >=4000 gemeint?
Solche Eingaben werden vom vorgegebenen scanf abgefangen, scanf würde in diesem Fall nur 12 speichern und den Rest ignorieren.

Das muss nicht abgefangen werden, eine Wertebereichsprüfung reicht.
Was ist denn nun richtig?