Как перевести в шестнадцатиричную систему счисления число из десятичной и обратно в PascalABC.NET
Ответ нейросети
10 марта 2026 16:31
Ниже подробное решение задачи: как перевести десятичное число в шестнадцатеричную систему счисления и обратно в PascalABC.NET. Мы сначала объясним сам алгоритм, затем приведём рабочий пример кода на PascalABC.NET и покажем пример работы.
Что нужно помнить
- Шестнадцатиричная система использует цифры 0–9 и буквы A–F (верхний регистр удобно использовать).
- В PascalABC.NET можно напрямую использовать шестнадцатеричные литералы через префикс $. Например: var x := $1A3; Это число в десятичной системе равно 419.
- Чтобы не зависеть от наличия конкретной встроенной функции (IntToHex, HexToInt и т.п.), можно реализовать переводы вручную с помощью деления на 16 и остатка.
Алгоритм простых переводов
- Десятичное число n в hex:
- Если n = 0, результат "0".
- Если n < 0, запомнить знак и работать с -n.
- Пока x > 0: взять d = x mod 16, превратить d в соответствующую цифру (0–9 or A–F) и добавлять слева. Затем x := x div 16.
- При отрицательном исходе вернуть знак минуса перед полученной строкой.
- Шестнадцатеричное число в десятичное:
- Игнорируем знак (если есть, запоминаем).
- Для каждого символа s[i] преобразовать его в числовое значение v (0–15): '0'..'9' → 0..9, 'A'..'F'/'a'..'f' → 10..15.
- Устанавливаем результат как рез = рез * 16 + v. Обрабатываем слева направо.
- В конце вернуть рез с учётом знака.
Рабочий пример кода (PascalABC.NET)
- Две функции: DecToHex (дек→шестн.) и HexToDec (шестн.→дек).
Code (PascalABC.NET):
uses System;
function DecToHex(n: LongInt): string; var sign: Char; x: LongInt; d: Integer; res: string; begin if n = 0 then Exit('0'); if n < 0 then begin sign := '-'; x := -n; end else begin sign := #0; x := n; end;
res := ''; while x > 0 do begin d := x mod 16; if d < 10 then res := chr(ord('0') + d) + res else res := chr(ord('A') + (d - 10)) + res; x := x div 16; end;
if sign = '-' then DecToHex := sign + res else DecToHex := res; end;
function HexCharToValue(c: Char): Integer; begin if (c >= '0') and (c <= '9') then Exit(Ord(c) - Ord('0')); c := UpCase(c); if (c >= 'A') and (c <= 'F') then Exit(10 + Ord(c) - Ord('A')); Exit(-1); // неверный символ end;
function HexToDec(s: string): LongInt; var i, v: Integer; acc: LongInt; ch: Char; begin acc := 0; for i := 1 to Length(s) do begin ch := s[i]; v := HexCharToValue(ch); if v < 0 then begin // можно выбросить ошибку, или вернуть 0; здесь делаем исключение raise Exception.Create('Invalid hex digit: ' + ch); end; acc := acc * 16 + v; end; HexToDec := acc; end;
var n: LongInt; h: string; hBack: LongInt;
begin // Ввод десятичного числа ReadLn(n); // Десятичное -> Шестнадцатеричное h := DecToHex(n); WriteLn('Десятичное ', n, ' → Шестнадцатеричное ', h);
// Шестнадцатеричное -> Десятичное hBack := HexToDec(h); WriteLn('Шестнадцатеричное ', h, ' → Десятичное ', hBack); end.
Пояснения по коду
- DecToHex реализует стандартную схему деления на 16 с накоплением цифр в обратном порядке. В конце получаем строку, где каждая цифра — символ 0..9 или A..F.
- HexToDec последовательно считывает символы строки и накапливает значение: результат = результат * 16 + значениеSymbol.
Пример работы
- Ввод: 1234 Десятичное 1234 → Шестнадцатеричное 4D2 Шестнадцатеричное 4D2 → Десятичное 1234
Дополнительные заметки
- В коде можно использовать прямые шестнадцатеричные литералы, если нужно писать константы: var a := $1A3; // 419
- Если ваша версия PascalABC.NET поддерживает встроенные функции для конвертации, можно заменить ручные функции на более короткие вызовы, например: uses SysUtils; var n: LongInt; var hexStr: string; // hexStr := IntToHex(n, 0); // конвертация decimal→hex (если такая сигнатура есть) // hexBack := HexToInt(hexStr); // конвертация hex→decimal (если такая сигнатура есть) Но настоятельно рекомендуется держать вручную реализованные функции, чтобы не зависеть от конкретной реализации стандартной библиотеки.
Если хочешь, могу привести пример с чтением строки для hex-пути обратно (например, вводишь строку с префиксом 0x или без префикса) и помочь адаптировать код под твою задачу.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



