mboost-dp1

Konverter romertal fra inputfil til arabiske tal i Java


Gå til bund
Gravatar #1 - good&evil
21. sep. 2008 20:09
Jeg skal bruge et program, som indlæser en række af
romertal, defineret nedenfor, fra en fil og udskriver de tilsvarende numeriske værdier (dvs.
sædvanlige arabiske tal) i sorteret rækkefølge efter deres numeriske værdi.

Inputfilen er formateret således:
V
X
VII
VI
III
V
IV
IX
II
VII

Så skulle udskriften meget gerne være sådan, så jeg får præcis ét heltal svarende til romertal i inputtet, på hver linje, sorteret efter deres numeriske værdi:
2
3
4
5
5
6
7
7
9
10

Nogen der kan hjælpe mig med dette?
Har ikke umiddelbart kunne finde noget på google, der kunne bruges tilpræcis dette formål, kun færdige convertes, der konvertere ud fra brugerinput.
Er ikke selv helt skarp til Java nemlig, men er dog i gang med at lære det.
Gravatar #2 - myplacedk
21. sep. 2008 20:13
Hvad er MAX-værdien? Hvis alle tallene er så små, er det måske lettere at lave en opslagstabel, end at fortolke tallene.
Gravatar #3 - good&evil
21. sep. 2008 20:17
jamen max værdien er vel 10? eller hvad mener du?

opslagstabel? hvordan?

så jeg bare siger at V = 5, III = 3 også udskriver det eller hvad?
Gravatar #4 - myplacedk
21. sep. 2008 20:17
Der er noget her, som kan tolke romertal. Jeg kan ikke lige finde noget kildekode, men alt efter hvad det skal bruges til kan man trække kildekoden ud af hans demo-applet.
Gravatar #5 - myplacedk
21. sep. 2008 20:19
good&evil (3) skrev:
jamen max værdien er vel 10? eller hvad mener du?

I dit eksempel er højeste værdi 10. Men hvad er den højeste værdi de de data du rent faktisk skal have konverteret? Også 10? Eller måske nærmere 100.000?

good&evil (3) skrev:
opslagstabel? hvordan?

så jeg bare siger at V = 5, III = 3 også udskriver det eller hvad?

Noget i den stil, ja.
Gravatar #6 - good&evil
21. sep. 2008 20:22
@5

jamen jeg skal bare have konverteret de enkelte romerske værdier som står oppe i topic, til de "normale" tal der står nedenunder, ved at bruge noget kode.
det skal ikke være en opslagstavle på den måde, men en algoritme der beregner værdien af romertallene og spytter de numeriske værdier ud.
Gravatar #7 - myplacedk
21. sep. 2008 20:26
Dvs. det er en skole-opgave, og ikke et praktisk problem?
Gravatar #8 - good&evil
21. sep. 2008 20:28
ikke skole, men problemløsning. jeg prøver lidt på at lære java.. online.. og er stødt på denne væg, som jeg ikke kan komme videre med, og derfor spørger jeg om hjælp :)
Gravatar #9 - myplacedk
21. sep. 2008 20:41
Ah, OK. Well, så er det er jo straks noget helt andet. :)

Uden at tænke alverden over det, så ville jeg måske starte med at prøve noget i denne stil:

function RomanToNumeric(String roman) {
if (roman.length == 1) {
return RomanCharToNumeric(roman.charAt(0));
}
int i = positionOfHighestChar(roman);
return RomanCharToNumeric(roman.charAt(i)
+ RomanToNumeric(roman.subString(i+1))
- RomanToNumeric(roman.subString(0, i));
}

(Jeg er så elendig til pseudo-kode - det compiler alt for ofte, mangler blot at implementere nogle funktioner.)

Eksempler på positionOfHighestChar:
I: 0
X: 0
VI: 0
IV: 1
IIV: 2
XXI: 0 (X har den højeste værdi, returner position for den første X.)
Gravatar #11 - good&evil
21. sep. 2008 21:02
Aah, I see you found each other :)
Gravatar #12 - myplacedk
22. sep. 2008 06:36
good&evil (11) skrev:
Aah, I see you found each other :)

Ærligt talt: Jeg hader det pis. Det er én af årsagerne til at jeg stoppede med den slags "gratis online support". Jeg gider ikke at vi sidder 2 (nogle gange flere) mennesker og bruger tid på at udføre det samme arbejde. Én af os spilder tiden, og denne gang var det vist mig.

Men du er i gode hænder med arne_v, han plejer at vide hvad han laver. Men min første tanke efter at have læst hans kode er nu "IIV != 5". ;-)

(Jeg ved godt "IIV" er dårlig stil, og at man burde skrive III i stedet. Men det er alligevel vigtigt at man kan læse det, da det i nogle tilfælde er vældig praktisk. Fx. IIMM = 1998)
Gravatar #13 - arne_v
27. sep. 2008 22:11
#12

Jeg har nu aldrig set 1998 skrevet som IIMM.
Gravatar #14 - myplacedk
28. sep. 2008 07:10
Nejnej, som sagt ved jeg godt at sådan plejer man ikke at gøre det. Men det er korrekt syntax. Skriver man kode til at læse romertal, bør det vel kunne forstå al korrekt syntax.
Gravatar #15 - arne_v
28. sep. 2008 11:14
#14

Pointen er at det ikke er korrekt syntax.

Der er en relaxed og en strict version af romertal - efter den relaxed så kan der være 1 "træk fra" tal foran - efter den stricte så kan der være 1 "træk fra" tal somforan og det kan kun være 1 magnitude mindre end det som det er foran.
Gravatar #16 - myplacedk
28. sep. 2008 11:58
#15
Den med "kun ét træk-fra tal foran" har jeg nu kun hørt som god skik, og ikke en fast regel.
Men pointen er blot: Jeg synes en romertals-fortolker burde fortolke IIV som 3, ikke 5. (Og IM som 999, uanset hvor grimt det er. Men det gør din vist også, som jeg lige husker koden jeg kiggede på i få sekunder for knap en uge siden.)
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login