Есть ответ 👍

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

178
258
Посмотреть ответы 2

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


не стал писать проверку на правильность введения римского числа. так что вводить нужно аккуратно, без ошибок, в верхнем регистре.

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.

TeoRe
4,5(58 оценок)

Ильченко, олесь григорьевич лариса петровна косач-квитка мария александровна вилинская-марковичтарас григорович шевченко багрянцева, анна юрьевна

Популярно: Информатика