Перевод арабских чисел в римские - 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;
Объяснение кода листинга программы
Код выполняет перевод чисел из римской системы счисления в арабскую и наоборот. Он также проверяет корректность ввода данных. Список элементов кода:
- Переменная S содержит строку с числом в римской системе счисления.
- Переменная RomanValues - массив, содержащий значения соответствующих римских цифр.
- Переменная I используется в качестве счётчика для обработки каждого символа входной строки.
- Переменная Negative используется для обработки отрицательных чисел.
- Функция RomanToInt выполняет перевод числа из римской системы счисления в арабскую.
- Функция IntToRoman выполняет перевод числа из арабской системы счисления в римскую.
- В каждой функции используется цикл while для обработки каждого символа входной строки.
- Каждый символ проверяется на соответствие римским цифрам.
- Если символ соответствует римской цифре, выполняется проверка следующего символа.
- Если следующий символ больше текущего, происходит обработка ошибки.
- Результат вычислений сохраняется в переменной Result.
- Если значение числа превышает максимальное для арабской системы счисления, выполняется обработка ошибки.
- Для каждой функции определён набор меток, используемых для перехода к определённым частям кода.
- В конце кода выполняется обработка отрицательных чисел.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д