Pascalban római számból arabot? Van egy programom, de nem tökéletes. Láttok-e benne kizárható hibalehetőségeket? Forráskód alul
program p10;
var i,n,szam:integer;
s:string;
begin
readln(s);
i:=1;
while i<=length(s) do
case s[i] of
'M':begin
szam:=szam+1000;
inc(i);
end;
'D':begin
if (s[i+1]='M') or (s[i+1]='D') then
begin
szam:=0;
i:=length(s)+1;
end
else
begin
szam:=szam+500;
inc(i);
end;
end;
'C':begin
case s[i+1] of
'M':begin
szam:=szam+900;
i:=i+2;
end;
'D':begin
szam:=szam+400;
i:=i+2;
end;
else
begin
szam:=szam+100;
inc(i);
end;
end;
end;
'L':begin
if (s[i+1]='M') or (s[i+1]='D') or (s[i+1]='L') then
begin
szam:=0;
i:=length(s)+1;
end
else
begin
szam:=szam+50;
inc(i);
end;
end;
'X':begin
if (s[i+1]='M') or (s[i+1]='D') then
begin
szam:=0;
i:=length(s)+1;
end
else
begin
case s[i+1] of
'C':begin
szam:=szam+90;
i:=i+2;
end;
'L':begin
szam:=szam+40;
i:=i+2;
end;
else
begin
szam:=szam+10;
inc(i);
end;
end;
end;
end;
'V':begin
if (s[i+1]='M') or (s[i+1]='D') or (s[i+1]='C') or (s[i+1]='L') or (s[i+1]='V') then
begin
szam:=0;
i:=length(s)+1;
end
else
begin
szam:=szam+5;
inc(i);
end;
end;
'I':begin
if (s[i+1]='M') or (s[i+1]='D') or (s[i+1]='C') or (s[i+1]='L') then
begin
szam:=0;
i:=length(s)+1;
end
else
begin
case s[i+1] of
'X':begin
szam:=szam+9;
i:=i+2;
end;
'V':begin
szam:=szam+4;
i:=i+2;
end;
else
begin
szam:=szam+1;
inc(i);
end;
end;
end;
end;
else
begin
szam:=0;
i:=length(s)+1;
end;
end;
if (szam>0) and (szam<4000) then
writeln(szam)
else
writeln('HELYTELEN SZAM');
readln;
end.
Szia.
Ami gond lehet szerintem :
A vizsgálatokban az I+1 index.
Ha az I éppen az utolsó karakternél jár (Tehát eléri a beadott string hosszát) akkor ezeknél a vizsgálatoknál valószinűleg hibával fog leállni a program, bár nem vagyok benne 100 %-osan biztos, de akkor sem szép dolog, a string vége után hivatkozni.
Sok sikert.
Üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!