Перевод арабских чисел в римские - C (СИ)

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Перевод арабских чисел в римские»

textual
Листинг программы
function RomanToInt(const S: string): Longint;
const
RomanChars = ['C','D','I','L','M','V','X'];
RomanValues: array['C'..'X'] of Word =
(100,500,0,0,0,0,1,0,0,50,1000,0,0,0,0,0,0,0,0,5,0,10);
var
Index, Next: Char;
I: Integer;
Negative: Boolean;
begin
Result := 0;
I := 0;
Negative := (Length(S) > 0) and (S[1] = '-');
if Negative then Inc(I);
while (I < Length(S)) do begin
Inc(I);
Index := UpCase(S[I]);
if Index in RomanChars then begin
if Succ(I) <= Length(S) then Next := UpCase(S[I + 1])
else Next := #0;
if (Next in RomanChars) and (RomanValues[Index] < RomanValues[Next]) then
begin
Inc(Result, RomanValues[Next]);
Dec(Result, RomanValues[Index]);
Inc(I);
end
else Inc(Result, RomanValues[Index]);
end
else begin
Result := 0;
Exit;
end;
end;
if Negative then Result := -Result;
end;
 
function IntToRoman(Value: Longint): string;
Label
A500, A400, A100, A90, A50, A40, A10, A9, A5, A4, A1;
begin
Result := '';
{$IFNDEF WIN32}
if (Value > MaxInt * 2) then Exit;
{$ENDIF}
while Value >= 1000 do begin
Dec(Value, 1000); Result := Result + 'M';
end;
if Value < 900 then goto A500
else begin
Dec(Value, 900); Result := Result + 'CM';
end;
goto A90;
A400:
if Value < 400 then goto A100
else begin
Dec(Value, 400); Result := Result + 'CD';
end;
goto A90;
A500:
if Value < 500 then goto A400
else begin
Dec(Value, 500); Result := Result + 'D';
end;
A100:
while Value >= 100 do begin
Dec(Value, 100); Result := Result + 'C';
end;
A90:
if Value < 90 then goto A50
else begin
Dec(Value, 90); Result := Result + 'XC';
end;
goto A9;
A40:
if Value < 40 then goto A10
else begin
Dec(Value, 40); Result := Result + 'XL';
end;
goto A9;
A50:
if Value < 50 then goto A40
else begin
Dec(Value, 50); Result := Result + 'L';
end;
A10:
while Value >= 10 do begin
Dec(Value, 10); Result := Result + 'X';
end;
A9:
if Value < 9 then goto A5
else begin
Result := Result + 'IX';
end;
Exit;
A4:
if Value < 4 then goto A1
else begin
Result := Result + 'IV';
end;
Exit;
A5:
if Value < 5 then goto A4
else begin
Dec(Value, 5); Result := Result + 'V';
end;
goto A1;
A1:
while Value >= 1 do begin
Dec(Value); Result := Result + 'I';
end;
end;

Объяснение кода листинга программы

Код выполняет перевод чисел из римской системы счисления в арабскую и наоборот. Он также проверяет корректность ввода данных. Список элементов кода:

  1. Переменная S содержит строку с числом в римской системе счисления.
  2. Переменная RomanValues - массив, содержащий значения соответствующих римских цифр.
  3. Переменная I используется в качестве счётчика для обработки каждого символа входной строки.
  4. Переменная Negative используется для обработки отрицательных чисел.
  5. Функция RomanToInt выполняет перевод числа из римской системы счисления в арабскую.
  6. Функция IntToRoman выполняет перевод числа из арабской системы счисления в римскую.
  7. В каждой функции используется цикл while для обработки каждого символа входной строки.
  8. Каждый символ проверяется на соответствие римским цифрам.
  9. Если символ соответствует римской цифре, выполняется проверка следующего символа.
  10. Если следующий символ больше текущего, происходит обработка ошибки.
  11. Результат вычислений сохраняется в переменной Result.
  12. Если значение числа превышает максимальное для арабской системы счисления, выполняется обработка ошибки.
  13. Для каждой функции определён набор меток, используемых для перехода к определённым частям кода.
  14. В конце кода выполняется обработка отрицательных чисел.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы