Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Римские в арабские и наоборот

Delphi , Синтаксис , Преобразования

Римские в арабские и наоборот

Автор: Gua
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Конвертация : Римские -> арабские ; Арабские->Римские

Зависимости:
Автор:       Gua, fbsdd@ukr.net, ICQ:141585495, Simferopol
Copyright:
Дата:        03 мая 2002 г.
***************************************************** }

const
  R: array[1..13] of string[2] =
  ('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
  A: array[1..13] of Integer =
  (1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);

  ..............

function ArabicToRoman(N: Integer): string; //Арабские в римские
var
  i: Integer;
begin
  Result := '';
  i := 13;
  while N > 0 do
  begin
    while A[i] > N do
      Dec(i);
    Result := Result + R[i];
    Dec(N, A[i]);
  end;
end;

function RomanToArabic(S: string): Integer; //Римские в арабские
var
  i, p: Integer;
begin
  Result := 0;
  i := 13;
  p := 1;
  while p <= Length(S) do
  begin
    while Copy(S, p, Length(R[i])) <> R[i] do
    begin
      Dec(i);
      if i = 0 then
        Exit;
    end;
    Result := Result + A[i];
    p := p + Length(R[i]);
  end;
end;

Программа на Delphi для преобразования между римскими цифрами и арабскими числами. Она состоит из двух функций: ArabicToRoman и RomanToArabic.

Функция ArabicToRoman Эта функция принимает целое число в качестве входного параметра и возвращает эквивалентную строку римских цифр.

Работа функции происходит следующим образом:

  1. Инициализируйте пустую строку Result, которая будет хранить представление римских цифр.
  2. Переберите массив A (который maps арабские числа к соответствующим римским цифрам) в обратном порядке (i := 13; ... Dec(i);).
  3. Для каждой итерации проверьте, является ли текущее арабское число больше входного параметра N. Если это так, уменьшите i, пока не найдете меньшее арабское число.
  4. Добавьте соответствующую римскую цифру к Result.
  5. Уберите значение добавленной римской цифры из N с помощью Dec(N, A[i]).

Функция RomanToArabic Эта функция принимает строку римских цифр в качестве входного параметра и возвращает эквивалентное арабское целое число.

Работа функции происходит следующим образом:

  1. Инициализируйте целочисленную переменную Result в значение 0, которая будет хранить представление арабского числа.
  2. Переберите массив R (который maps римские цифры к соответствующим арабским числам) в обратном порядке (i := 13; ... Dec(i);).
  3. Для каждой итерации проверьте, является ли текущая римская цифра префиксом входной строки S. Если это не так, уменьшите i, пока не найдете соответствующую римскую цифру.
  4. Добавьте значение соответствующей римской цифры к Result.
  5. Увеличьте позиционный указатель p на длину добавленной римской цифры.

Предложения по улучшению кода 1. Рассмотрите использование более эффективного алгоритма для преобразования между римскими цифрами и арабскими числами, например, таблицу соответствий или рекурсивный подход. 2. Добавьте обработку ошибок для недопустимых входных данных (например, нечисловые символы в строке римских цифр). 3. Используйте более описательные имена переменных для улучшения читаемости кода. 4. Рассмотрите добавление поддержки других систем счисления, таких как шестнадцатеричная или двоичная.

Альтернативное решение Вместо использования двух отдельных функций можно использовать одиночную функцию с дополнительным параметром, указывающим направление преобразования (например, ConvertBetweenNumbers(N: Integer; ToRoman: Boolean): string). Это позволит для более гибкой и повторной реализации кода.

В статье описана программа для конвертации чисел с римскими и арабскими системами счисления, написанная на языке Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Преобразования ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:21:49/0.0038168430328369/0