Текст адания:
Дан текст из заглавных латинских букв, за которыми следует пробел. Определите, является ли этот текст правильной записью римскими цифрами числа от 1 до 999, и если является, то записать его арабскими(в десятичной системе)...вот и все. Уменя есть программа для преобразования римских цифр в арабские, но она работает не корректно, т.е число 4 записывает в виде IIII а не IV. Вот она:
http://forum.pascal.net.ru/index.php?s=&showtopic=4535&view=findpost&p=38393 смотрел?
Кроме этого, пользуйся тегами [ code ] и в следующий раз давай более корректное название темы...
Народ, вот у меня возникла проблема: вроде бы работающая прога:
program stroka;
USES CRT;
Const
konst=13 ;
R: Array[1 .. konst] of String =
('I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M');
A: Array[1 .. konst] of Integer =
(1,4,5,9,10,40,50,90,100,400,500,900,1000);
Var
N, Err,i : Integer;
vv_stroka: string;
BigText: string;
{---------- perevod stroki v verhniy registr ---------------}
function Big(vv_stroka: string): string;
begin
for i:=1 to length(vv_stroka) do
begin
case vv_stroka[i] of
'a'..'z': dec(vv_stroka[i],32);
'1'..'0': dec(vv_stroka[i],1);
end;
end;
BigText:=vv_stroka;
end;
{---------opredelenie pravil'nosti zapisi rimskogo chisla----------------}
Function Rchislo(N: Integer): String;
Var
Result: String;
i: Integer;
begin
Result:= '';
i :=13; {kolichestvo elementov v massive}
While N > 0 do
begin
While A[i] > N do Dec(i);
Result := Result + R[i];
Dec(N, A[i]); end;
Rchislo := Result;
end;
{------------ rimskoe chislo to arabskoe chislo ---------------}
Function Achislo(BigText: String): integer;
Var
Result,i, p: Integer;
error:string;
begin
Achislo := -1 ;
error:='Dannaya stroka ne yavlaetsya chislom';
Result := 0;
i :=13;
p := 1;
begin
While p <=Length(BigText) do
begin
While Copy(BigText, p, Length(R[i])) <> R[i] do
begin
Dec(i);
If i = 0 then Exit;
end;
Result := Result + A[i];
p := p + Length(R[i]);
end;
If Rchislo(Result) = BigText then Achislo := Result
end;
end;
{================= osnovnaya programma ======================}
begin
clrscr;
write('Vvedite stroku:'); {vvod stroki}
readln(vv_stroka);
Big(vv_stroka); {preobrazovanie v verxniy registr}
writeln('Preibrazovannaya stroka:',BigText:5);
Achislo(BigText);
writeln('chislo:',Achislo(BigText):7);
readln;
end.
{------------ razbienie stroki na slova ----------------}
Procedure Razbienie(vv_stroka:string);
Var
i:Integer;
w:String;
Begin
If vv_stroka[Length(vv_stroka)]<>' 'Then
vv_stroka:=vv_stroka+' ';
W:=' ';
writeln('VVEDENIE SLOVA:');
For i:=1 To length(vv_stroka) Do
begin
If vv_stroka[i]<>' ' Then w:=w+vv_stroka[i]
Else
Begin
WriteLn(w);
w:=' ' ;
End;
End;
READLN;
end;