On 9/23/13, Lukasz Sokol <el.es...@gmail.com> wrote: > function TryRomanToInt(AInput:String; out AResult: integer):boolean; > var i, Len, N, Np1 : integer; [snip] > > > if N >= Np1 then AResult := AResult + N > else AResult := AResult - N; > > end; > else // i = Len-1 = last char we just add (consider : MCM : add 1000,
Compiler doesn't like the else here. I removed the ; after the end 1 line above. > sub 100, add 1000 = 1900) > begin > AResult := AResult + N; > end; > end; // for > // if the above, after all characters are through, has resulted in 0 or > less, > // we invalidate everything at the end (consider : CMLM, IIIM ) > > Result := AResult > 0; > if not Result then AResult := 0; > end; > > (only mind-compiled ;) tests welcome ;) ) > It produces "odd" output though: C:\Users\Bart\LazarusProjecten\ConsoleProjecten>test Enter Roman numeral: LL //should be illegal TryRomanToInt('LL') -> 50 StrUtils.RomanToInt('LL') = 100 Enter Roman numeral: MM TryRomanToInt('MM') -> 1050 //obviously should be 2000 StrUtils.RomanToInt('MM') = 2000 Enter Roman numeral: II TryRomanToInt('II') -> 1051 // nice one! StrUtils.RomanToInt('II') = 2 So, it's a little bit flawed. Anyhow, let's not focus upon what the new code should be. The question was: is current behaviour (accepting IIMIIC etc.) a bug or not. Bart _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal