Перевод римского числа в десятичное (Pascal)

Программирование Программирование на Pascal Перевод римского числа в десятичное (Pascal)

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 2 нед., 3 дн. назад.

  • Автор
    Сообщения
  • #5595
    @admin

    Римские цифры — цифры, использовавшиеся древними римлянами в своей непозиционной системе счисления.

    Натуральные числа записываются при помощи повторения этих цифр. При этом, если большая цифра стоит перед меньшей, то они складываются (принцип сложения), если же меньшая — перед большей, то меньшая вычитается из большей (принцип вычитания). Последнее правило применяется только во избежание четырёхкратного повторения одной и той же цифры.

    Римские цифры появились около 500 лет до нашей эры у этрусков. Лишь в XV веке римские цифры были постепенно заменены арабскими (индийскими) цифрами.

    Римские числа
    I 1 XI 11 XXX 30 CD 400
    II 2 XII 12 XL 40 D 500
    III 3 XIII 13 L 50 DC 600
    IV 4 XIV 14 LX 60 DCC 700
    V 5 XV 15 LXX 70 DCCC 800
    VI 6 XVI 16 LXXX 80 CM 900
    VII 7 XVII 17 XC 90 M 1000
    VIII 8 XVIII 18 C 100 MM 2000
    IX 9 XIX 19 CC 200 MMM 3000
    X 10 XX 20 CCC 300    

    program One_4(input);
    
    uses
      CRT;
    
    var
      s: string;
      i, n, m, k: integer;
    begin
      ClrScr;
      {Файловые операции. Открытие файла}
      Assign(input, 'b.in');
      Reset(input);
      {Ввод данных - римское число}
      readln(s);
      n := 0;
      m := length(s);
      for i := 1 to m do
      begin
        case s[i] of
          'I': n := n + 1;
          'V': n := n + 5;
          'X': n := n + 10;
          'L': n := n + 50;
          'C': n := n + 100;
          'D': n := n + 500;
          'M': n := n + 1000;
        end;
        {Если нарушен порядок следования римских символов}
        if ((s[i] = 'V') or (s[i] = 'X')) and (s[i - 1] = 'I') then
          n := n - 2;
        if ((s[i] = 'L') or (s[i] = 'C')) and (s[i - 1] = 'X') then
          n := n - 20;
        if ((s[i] = 'M') or (s[i] = 'D')) and (s[i - 1] = 'C') then
          n := n - 200;
      end;
      {Вывод результата}
      writeln(n);
      repeat
      until KeyPressed;
    end.

Для ответа в этой теме необходимо авторизоваться.