Согласие на обработку персональных данных.

17.09.2018
Новая задача Как определить порядковый номер символа.

07.09.2018
Новый выпуск журнала Автоматизация и программирование.

26.08.2018
Новые видео и статья Как закрепить окна в IDE Lazarus.

18.08.2018
Новая задача Сколько слайдов поместится в песню.

17.08.2018
Новый раздел: Этюды для программистов.



Раздел: Задачи / Простейшие /

Преобразование десятичного числа в шестнадцатеричное

Условие задачи 2.26

Задача 2.26
Дано натуральное число X в десятичной системе счисления. Перевести его в шестнадцатеричную систему счисления. Результат вывести на экран.

Программистам приходится довольно часто это делать. Поэтому почти во всех языках программирования имеются стандартные подпрограммы для преобразования различных форматов записи чисел. В Паскале для этого есть множество функций (одну из них вы увидите ниже), а в С++ можно использовать манипуляторы и флаги форматирования (подробнее об этом в моей книге Основы С++).

Однако использование стандартных средств - это было бы слишком просто. Поэтому мы создадим собственную функцию для перевода десятичного числа в шестнадцатеричное.

Кстати, если вы подзабыли, что такое натуральное число, то читайте здесь.

Запись шестнадцатеричных чисел в Паскале и С++

На всякий случай напомню (хотя для решения нашей задачи это и не обязательно), что в исходных текстах на Паскале шестнадцатеричное число записывается так:

$NNNN

то есть перед цифрами числа ставится знак доллара, а затем записывается число в шестнадцатеричной системе.

В Си и С++ это делается так:

0хNNNN

то есть перед числом ставится 0х, а затем записываются цифры числа.

Разумеется, цифр в числе может быть не обязательно четыре, как в примерах.

Функция преобразования числа в шестнадцатеричное

В Паскале есть стандартная функция для преобразования десятичных чисел в шестнадцатеричные: IntToHex. Эта функция объявлена в модуле SysUtils, и её мы будем использовать для проверки работы нашей собственной функции, которую я назову MyIntToHex, и которая будет работать примерно также, как и стандартная функция IntToHex.

Кроме того, чтобы упростить код основной функции, я использую вспомогательную функцию DigitToHex, которая будет переводить одну десятичную цифру в шестнадцатеричную.

Решение будет, быть может, не самым простым. Но зато мы постараемся использовать как можно меньше стандартных функций. Коды функций отдельно приводить не буду - см. их в примерах программ.

Также не забываем, что по условию задачи нам требуется выполнить преобразование только для натуральных чисел. Отрицательные числа не являются натуральными, поэтому наша функция с ними не работает (хотя если убрать в теле функции проверку числа, то будет работать также как и стандартная функция IntToHex).

Решение задачи 2.26 на Паскале
 
program mytask;

uses SysUtils;    //Подключить этот модуль !!!

//****************************************************************
// КОНСТАНТЫ
//****************************************************************
const
  NUM = $0ABC;    //Число 2748

//****************************************************************
// ФУНКЦИИ И ПРОЦЕДУРЫ
//****************************************************************

//****************************************************************
// Преобразует десятичную цифру в шестнадцатеричную (символ)
// ВХОД  : N - цифра
// ВЫХОД : шестнадцатеричная цифра (символ)
//****************************************************************
function DigitToHex(N : Integer) : char;
begin
  Result := '?';
  case N of
  0   : Result := '0';
  1   : Result := '1';
  2   : Result := '2';
  3   : Result := '3';
  4   : Result := '4';
  5   : Result := '5';
  6   : Result := '6';
  7   : Result := '7';
  8   : Result := '8';
  9   : Result := '9';
  10  : Result := 'A';
  11  : Result := 'B';
  12  : Result := 'C';
  13  : Result := 'D';
  14  : Result := 'E';
  15  : Result := 'F';
  end;
end;

//****************************************************************
// Преобразует десятичное число в шестнадцатеричное (строку)
// ВХОД  : Num - число, Count - количество цифр в шестнадцатеричном числе
// ВЫХОД : шестнадцатеричное число (строка)
//****************************************************************
function MyIntToHex(Num, Count : Integer) : string;
var N, X  : Integer;
    i, j  : Integer;
    Res   : string;
begin
  if Num < 0 then Exit;
  Res := '';
  Result := '?';
  N := Num;
  i := 1;
  while N > 0 do
    begin
      Inc(i);
      X := N mod 16;
      N := N div 16;
      if X < 16 then Res := DigitToHex(X) + Res;
    end;
  for j := i to Count do Res := '0' + Res;
  Result := Res;
end;

//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
begin

  WriteLn('DEC = ', NUM, '; HEX = ', IntToHex(NUM, 4));
  WriteLn('DEC = ', NUM, '; HEX = ', MyIntToHex(NUM, 4));

  WriteLn('The end. Press ENTER...');
  ReadLn;
end.
Решение задачи 2.26 на С++
#include <cstdlib>
#include <iostream>

using namespace std;

//****************************************************************
// КОНСТАНТЫ
//****************************************************************
const int NUM = 0xABC;    //Число 2748 

//****************************************************************
// ФУНКЦИИ И ПРОЦЕДУРЫ
//****************************************************************

//****************************************************************
// Преобразует десятичную цифру в шестнадцатеричную (символ)
// ВХОД  : N - цифра
// ВЫХОД : шестнадцатеричная цифра (символ)
//****************************************************************
char DigitToHex(int N)
{
  switch (N)
  {
    case 0  : return('0'); break;
    case 1  : return('1'); break;
    case 2  : return('2'); break;
    case 3  : return('3'); break;
    case 4  : return('4'); break;
    case 5  : return('5'); break;
    case 6  : return('6'); break;
    case 7  : return('7'); break;
    case 8  : return('8'); break;
    case 9  : return('9'); break;
    case 10 : return('A'); break;
    case 11 : return('B'); break;
    case 12 : return('C'); break;
    case 13 : return('D'); break;
    case 14 : return('E'); break;
    case 15 : return('F'); break;
    default : return('?');
  }
}

//****************************************************************
// Преобразует десятичное число в шестнадцатеричное (строку)
// ВХОД  : Num - число, Count - количество цифр в шестнадцатеричном числе
// ВЫХОД : шестнадцатеричное число (строка)
//****************************************************************
string MyIntToHex(int Num, int Count)
{
  string Res = "?";
  if (Num < 0) return(Res);
  Res = "";
  int N = Num;
  int i = 1;
  int X;
  while (N > 0)
  {
    i++;
    X = N % 16;
    N = N / 16;
    if (X < 16) Res = DigitToHex(X) + Res;
  }
  for (int j = i; j <= Count; j++) Res = '0' + Res;
  return(Res);
}        

//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
int main(int argc, char *argv[])
{
  cout << "DEC = " << NUM << "; HEX = " << hex << uppercase << NUM << dec << endl;
  cout << "DEC = " << NUM << "; HEX = " << MyIntToHex(NUM, 4) << endl;
  
  system("PAUSE");
  return EXIT_SUCCESS;
}

Преобразование десятичного числа в шестнадцатеричное


Основы C++ Основы C++

C++ - это один из самых популярных языков программирования. Не важно, на каком языке программируете лично вы. Но, если вы хотя бы в общих чертах не знаете С++, то это большой пробел в вашем образовании, который надо восполнить как можно быстрее... Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика