• Объясните пожалуйста все в этом коде:
    Больше всего не понимаю:
    begin
    inc(n);
    while (ARABIC[n] <= number) do
    begin
    sNumber := sNumber + ROME[n];
    number := number - ARABIC[n];
    //writeln(sNumber);
    end

    //ПРОГРАММА ДЛЯ ПЕРЕВОДА АРАБСКИХ
    //ЧИСЕЛ В РИМСКИЕ
    const
    ROME: array[1..13] of string = ('M', 'CM', 'D', 'CD', 'C', 'XC',
    'L', 'XL', 'X', 'IX', 'V', 'IV', 'I');
    ARABIC: array[1..13] of integer = (1000, 900, 500, 400, 100, 90, 50,
    40, 10, 9, 5, 4, 1);
    var
    number: integer;
    sNumber: string;
    n: integer;
    //=========================================
    // ОСНОВНАЯ ПРОГРАММА
    //=========================================
    begin
    while(true) do
    begin
    repeat
    writeln('Введите арабское число 1..3999');
    number := ReadInteger();
    //Если задан нуль, то работу с программой заканчиваем:
    if (number = 0) then exit;
    until ((number >= 1) and (number <= 3999));
    //Формируем строку с римским числом,
    //равным заданному числу number:
    n := 0;
    sNumber := '';
    while (number > 0) do
    begin
    inc(n);
    while (ARABIC[n] <= number) do
    begin
    sNumber := sNumber + ROME[n];
    number := number - ARABIC[n];
    //writeln(sNumber);
    end
    end;
    writeln(sNumber);
    writeln();
    end;
    end.

Ответы 1

  • Есть неудобные древние римские цифры, их нужно перевести в современные индийские цифры, которые почему-то называются арабскими.

    берется строка типа:

    LXIV и посимвольно (иногда по двусимвольно идет справа налево) и переводит в обычные нам цифры. IV - переводит в 4. Потом X переводит в 10, потом L переводит в 50. Складывает полученное, получается 64.  Перевели. Т.к. строка с латинской цифрой большая и не известно сколько там символов(LXIV тут 4), то берется цикл по переменной длине строки. Цикл пройдет все символы строки( 4 их или 10), в цикле будет N количество итераций, столько сколько знаков в латинской цифре.

    Цикл это вот это:

    while(true) do

    begin

    repeat

    ***тут идет итерация цикла***

    until ((number >= 1) and (number <= 3999));

  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years