Объясните пожалуйста все в этом коде: Больше всего не понимаю: begin inc(n); while...

0 голосов
57 просмотров

Объясните пожалуйста все в этом коде:
Больше всего не понимаю:
begin
inc(n);
while (ARABIC[n] <= number) do<br> 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));<br> //Формируем строку с римским числом,
//равным заданному числу number:
n := 0;
sNumber := '';
while (number > 0) do
begin
inc(n);
while (ARABIC[n] <= number) do<br> begin
sNumber := sNumber + ROME[n];
number := number - ARABIC[n];
//writeln(sNumber);
end
end;
writeln(sNumber);
writeln();
end;
end.


Информатика (12 баллов) | 57 просмотров
Дан 1 ответ
0 голосов

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

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

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

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

while(true) do

begin

repeat

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

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

(13.4k баллов)