Раздел: Задачи / Простейшие /
Преобразование десятичного числа в шестнадцатеричное
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Условие задачи 2.26
Задача 2.26
Дано натуральное число X в десятичной системе счисления. Перевести его в шестнадцатеричную систему счисления. Результат вывести на экран.
Программистам приходится довольно часто это делать. Поэтому почти во всех языках программирования имеются стандартные подпрограммы для преобразования различных форматов записи чисел. В Паскале для этого есть множество функций (одну из них вы увидите ниже), а в С++ можно использовать манипуляторы и флаги форматирования (подробнее об этом в моей книге Основы С++).
Однако использование стандартных средств - это было бы слишком просто. Поэтому мы создадим собственную функцию для перевода десятичного числа в шестнадцатеричное.
Кстати, если вы подзабыли, что такое натуральное число, то читайте здесь.
Запись шестнадцатеричных чисел в Паскале и С++
На всякий случай напомню (хотя для решения нашей задачи это и не обязательно), что в исходных текстах на Паскале шестнадцатеричное число записывается так:
$NNNN
то есть перед цифрами числа ставится знак доллара, а затем записывается число в шестнадцатеричной системе.
В Си и С++ это делается так:
0хNNNN
то есть перед числом ставится 0х, а затем записываются цифры числа.
Разумеется, цифр в числе может быть не обязательно четыре, как в примерах.
Функция преобразования числа в шестнадцатеричное
В Паскале есть стандартная функция для преобразования десятичных чисел в шестнадцатеричные: IntToHex. Эта функция объявлена в модуле SysUtils, и её мы будем использовать для проверки работы нашей собственной функции, которую я назову MyIntToHex, и которая будет работать примерно также, как и стандартная функция IntToHex.
Кроме того, чтобы упростить код основной функции, я использую вспомогательную функцию DigitToHex, которая будет переводить одну десятичную цифру в шестнадцатеричную.
Решение будет, быть может, не самым простым. Но зато мы постараемся использовать как можно меньше стандартных функций. Коды функций отдельно приводить не буду - см. их в примерах программ.
Также не забываем, что по условию задачи нам требуется выполнить преобразование только для натуральных чисел. Отрицательные числа не являются натуральными, поэтому наша функция с ними не работает (хотя если убрать в теле функции проверку числа, то будет работать также как и стандартная функция IntToHex).
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.
#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; }
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |