Бесплатный урок с нашим репетитором!

Узнать подробнее

Новая Школа - онлайн-школа подготовки к ЕГЭ
При поддержке
Посмотреть все вопросы нейросети
Бесплатный пробный урок с репетитором

Узнай больше про репетиторов Новой Школы и запишись на бесплатный пробный урок. Мы проверим твой уровень знаний и составим план обучения по любому предмету и классу

Вопрос от Анонимного юзера 10 марта 2026 16:31

Как перевести в шестнадцатиричную систему счисления число из десятичной и обратно в 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:
    1. Если n = 0, результат "0".
    2. Если n < 0, запомнить знак и работать с -n.
    3. Пока x > 0: взять d = x mod 16, превратить d в соответствующую цифру (0–9 or A–F) и добавлять слева. Затем x := x div 16.
    4. При отрицательном исходе вернуть знак минуса перед полученной строкой.
  • Шестнадцатеричное число в десятичное:
    1. Игнорируем знак (если есть, запоминаем).
    2. Для каждого символа s[i] преобразовать его в числовое значение v (0–15): '0'..'9' → 0..9, 'A'..'F'/'a'..'f' → 10..15.
    3. Устанавливаем результат как рез = рез * 16 + v. Обрабатываем слева направо.
    4. В конце вернуть рез с учётом знака.

Рабочий пример кода (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 или без префикса) и помочь адаптировать код под твою задачу.

Задай свой вопрос

Напиши любую задачу или вопрос, а нейросеть её решит

Похожие вопросы 15

Бесплатно Мобильное приложение ГДЗ
Мобильное приложение ГДЗ

Задавай вопросы искуcственному интеллекту текстом или фотографиями в приложении на iPhone или Android

qr-codegoogle-playapp-store

Саша — ассистент в телеграмме

Как перевести в шестнадцатиричную систему счисления число из десятичной и обратно в PascalABC.NET
Ниже подробное решение задачи: как перевести десятичное число в шестнадцатеричную систему счисления и обратно в PascalABC.NET. Мы сначала объясним сам алгоритм, затем приведём рабочий пример кода на PascalABC.NET и покажем пример работы. Что нужно помнить - Шестнадцатиричная система использует цифры 0–9 и буквы A–F (верхний регистр удобно использовать). - В PascalABC.NET можно напрямую использовать шестнадцатеричные литералы через префикс $. Например: var x := $1A3; Это число в десятичной системе равно 419. - Чтобы не зависеть от наличия конкретной встроенной функции (IntToHex, HexToInt и т.п.), можно реализовать переводы вручную с помощью деления на 16 и остатка. Алгоритм простых переводов - Десятичное число n в hex: 1) Если n = 0, результат "0". 2) Если n < 0, запомнить знак и работать с -n. 3) Пока x > 0: взять d = x mod 16, превратить d в соответствующую цифру (0–9 or A–F) и добавлять слева. Затем x := x div 16. 4) При отрицательном исходе вернуть знак минуса перед полученной строкой. - Шестнадцатеричное число в десятичное: 1) Игнорируем знак (если есть, запоминаем). 2) Для каждого символа s[i] преобразовать его в числовое значение v (0–15): '0'..'9' → 0..9, 'A'..'F'/'a'..'f' → 10..15. 3) Устанавливаем результат как рез = рез * 16 + v. Обрабатываем слева направо. 4) В конце вернуть рез с учётом знака. Рабочий пример кода (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 или без префикса) и помочь адаптировать код под твою задачу.