
Написать программу в паскале - вводится латинское число (любое) выдать его в текстовой форме,
например вводится( MDCLX\/I ), вадать (тысяча шестьсот шесдисят шесть).

Ответы на вопрос

Не стал писать проверку на правильность введения римского числа. Так что вводить нужно аккуратно, без ошибок, в верхнем регистре.
var a, stroka:string;
i,n,t,s,d,e,x : Integer;
b:array[1..20] of integer;
type slova = array[0..9] of String[15];
const
edinit : slova = ('',' один',' два',' три',' четыре',' пять',' шесть',' семь', ' восемь',' девять');
desyat : slova = ('',' десять',' двадцать',' тридцать',' сорок',' пятьдесят', ' шестьдесят',' семьдесят',' восемьдесят ',' девяносто');
sotnya : slova = ('',' сто',' двести',' триста',' четыреста',' пятьсот',' шестьсот',' семьсот',' восемьсот',' девятьсот');
teeeen : slova = ('',' одинадцать',' двенадцать',' тринадцать',' четырнадцать', ' пятнадцать',' шестнадцать',' семнадцать',' восемьнадцать', ' девятнадцать');
tyscha : slova = ('','одна тысяча','две тысячи','три тысячи','четыре тысячи','пять тысяч','шесть тысяч','семь тысяч', 'восемь тысяч','девять тысяч');
begin
writeln('Введите римское число: ');
readln(a);
{записываем число как сумму арабских эквивалентов в массив}
for i:=1 to length(a) do
case a[i] of
'I': b[i]:=1;
'V': b[i]:=5;
'X': b[i]:=10;
'L': b[i]:=50;
'C': b[i]:=100;
'D': b[i]:=500;
'M': b[i]:=1000;
end;
{суммируя элементы массива, находим число в 10-м виде}
n:=0;
for i:=1 to length(a) do
begin
n:=n+b[i];
if(i>1)and( b[i-1]<b[i]) then n:=n-2*b[i-1]; //если меньшая римская цифра идёт перед большей, то она вычитается
end;
{преобразовываем число в текст}
stroka:='';
t:=n div 1000;
if t>0 then stroka:=stroka+tyscha[t];
s:=n div 100 mod 10;
stroka:=stroka+sotnya[s];
x:=n mod 100;
d:=X div 10;
e:=X mod 10;
if (d=1) and (e<>0) then stroka:=stroka+teeeen[e]
else stroka:=stroka+desyat[d]+edinit[e];
writeln(stroka);
end.



Для написания программы на Паскале, которая будет преобразовывать латинское число в текстовую форму, нужно создать процедуру или функцию, которая будет выполнять это преобразование. В данном случае, будем использовать функцию. Ниже представлена примерная реализация программы на Паскале:
pascalprogram LatinToText; uses SysUtils; const // Определяем соответствия между латинскими цифрами и их значениями RomanNumerals: array[1..13] of string = ('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'); DecimalValues: array[1..13] of integer = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1); function RomanToDecimal(const RomanNumber: string): integer; var i, pos: integer; begin Result := 0; pos := 1; for i := 1 to Length(RomanNumber) do begin if RomanNumber[i] = 'M' then begin Result := Result + 1000; Inc(pos); end else if RomanNumber[i] = 'D' then begin Result := Result + 500; Inc(pos); end else if RomanNumber[i] = 'C' then begin if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'M') then begin Result := Result + 900; Inc(i); end else if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'D') then begin Result := Result + 400; Inc(i); end else Result := Result + 100; Inc(pos); end else if RomanNumber[i] = 'L' then begin Result := Result + 50; Inc(pos); end else if RomanNumber[i] = 'X' then begin if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'C') then begin Result := Result + 90; Inc(i); end else if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'L') then begin Result := Result + 40; Inc(i); end else Result := Result + 10; Inc(pos); end else if RomanNumber[i] = 'V' then begin Result := Result + 5; Inc(pos); end else if RomanNumber[i] = 'I' then begin if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'X') then begin Result := Result + 9; Inc(i); end else if (pos < Length(RomanNumber)) and (RomanNumber[i + 1] = 'V') then begin Result := Result + 4; Inc(i); end else Result := Result + 1; Inc(pos); end; end; end; function DecimalToText(DecimalNumber: integer): string; const // Определяем текстовые формы чисел от 1 до 1000 TextForms: array[1..20] of string = ('один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать', 'двадцать'); TextTens: array[1..9] of string = ('двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'); TextHundreds: array[1..9] of string = ('сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'); var TextNumber: string; Hundreds, Tens, Ones: integer; begin TextNumber := ''; Hundreds := DecimalNumber div 100; Tens := (DecimalNumber mod 100) div 10; Ones := DecimalNumber mod 10; if Hundreds > 0 then TextNumber := TextHundreds[Hundreds] + ' '; if DecimalNumber mod 100 <= 20 then TextNumber := TextNumber + TextForms[DecimalNumber mod 100] else begin if Tens > 0 then TextNumber := TextNumber + TextTens[Tens] + ' '; if Ones > 0 then TextNumber := TextNumber + TextForms[Ones]; end; Result := Trim(TextNumber); end; var RomanNumber: string; DecimalNumber: integer; begin Write('Введите латинское число: '); ReadLn(RomanNumber); DecimalNumber := RomanToDecimal(AnsiUpperCase(RomanNumber)); if DecimalNumber > 0 then WriteLn('Текстовая форма числа: ', DecimalToText(DecimalNumber)) else WriteLn('Неверный формат латинского числа.'); ReadLn; end.
Программа предлагает пользователю ввести латинское число, затем она преобразует его в десятичное число, а затем в текстовую форму и выводит результат на экран. Обратите внимание, что данная реализация работает только с числами от 1 до 1000.


Похожие вопросы
Топ вопросов за вчера в категории Информатика









Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili