Форум программистов, компьютерный форум CyberForum.ru

Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.98
Весло
0 / 0 / 0
Регистрация: 20.04.2011
Сообщений: 12
20.04.2011, 02:00     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования #1
Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования (без простого вывода числа в шестнадцатиричной)... помогите пожалуйста очень надо, я полный новичек, хотелось бы посмотреть как может выглядеть работающая программа... алгоритм по идее такой:

1. Делим десятичное число А на 16. Частное Q запоминаем для следующего шага, а остаток a записываем как младший бит шестнадцатеричного числа.
2. Если частное q не равно 0, принимаем его за новое делимое и повторяем процедуру, описанную в шаге 1. Каждый новый остаток записывается в разряды шестнадцатеричного числа в направлении от младшего бита к старшему.
3. Алгоритм продолжается до тех пор, пока в результате выполнения шагов 1 и 2 не получится частное Q = 0 и остаток a меньше 16.

Как реализовать? заранее благодарен...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2011, 02:00     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования
Посмотрите здесь:

C++ Перевод десятичного числа в двоичное
C++ Преобразование десятичного числа в двоичное
перевод десятичного числа в шестнадцатеричное C++
Перевод десятичного числа в двоичное C++
Сложение десятичного и шестнадцатеричного числа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
20.04.2011, 13:24     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <vcl.h>
#include <iostream.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
 char hz[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
 unsigned long A=32767;
 String HEX="", RHEX="";
 unsigned long q=(A/16);
 unsigned long a=(A%16);
 while (q)
 {
  a=A%16;
  q=(A/16);
  HEX=HEX+hz[a];
  A=q;
 }
 for(unsigned long i=HEX.Length();i>0;i--)
 {
  RHEX=RHEX+HEX[i];
 }
 cout << RHEX.c_str();
 return 0;
}
Весло
0 / 0 / 0
Регистрация: 20.04.2011
Сообщений: 12
20.04.2011, 20:49  [ТС]     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования #3
Спасибо Вам огромное!

еще вопрос, все переводится правильно, кроме диапазона чисел от 10 до 15 (которые должны быть в результате А, B, C, D, E, F). Как же быть в этом случае?

и еще вопрос: 15 строка: while (q)
это одно и тоже что и если бы я написал while (q!=0)? или не совсем?


а это:
for(unsigned long i=HEX.Length();i>0;i--)
{
RHEX=RHEX+HEX[i];
}
выводит результат в обратной последовательности, насколько я понял?

Заранее огромное спасибо.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
20.04.2011, 21:05     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования #4
Цитата Сообщение от Весло Посмотреть сообщение
еще вопрос, все переводится правильно, кроме диапазона чисел от 10 до 15 (которые должны быть в результате А, B, C, D, E, F). Как же быть в этом случае?
Чтобы сильно мозг не морщить вставьте вначале проверку
C++
1
if (A<16) RHEX=hz[A];
и на вывод сразу
Цитата Сообщение от Весло Посмотреть сообщение
и еще вопрос: 15 строка: while (q)
это одно и тоже что и если бы я написал while (q!=0)? или не совсем?
Условие в скобках всегда проверяется на 0/1. Если не 0, то выполняется. Поэтому одно и то же
Цитата Сообщение от Весло Посмотреть сообщение
а это:
for(unsigned long i=HEX.Length();i>0;i--)
{
RHEX=RHEX+HEX[i];
}
выводит результат в обратной последовательности, насколько я понял?
Именно так, по алгоритму перевода порядок байт от младших к старшим. Мы же сначала формируем строку путём добавления, а потом переворачиваем её
Весло
0 / 0 / 0
Регистрация: 20.04.2011
Сообщений: 12
20.04.2011, 21:42  [ТС]     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования #5
Благодарю Вас еще раз!

и последний вопрос: 26-ая строка:
cout << RHEX.c_str();

c_str() - возвращает указатель на его внутреннее хранилище символов насколько помню, а здесь мы его применяем потому что без него строка результата не будет выводится? правильно?
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
21.04.2011, 06:47     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования #6
Цитата Сообщение от Весло Посмотреть сообщение
и последний вопрос: 26-ая строка:
cout << RHEX.c_str();
Если по простому, то это перевод типа String в массив char[] для вывода
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.04.2011, 08:14     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования #7
Дополнительного условия не надо. Просто строки
C++
1
2
unsigned long q=(A/16);
unsigned long a=(A%16);
переделать в
C++
1
2
unsigned long q;
unsigned long a;
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
21.04.2011, 11:24     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования #8
Если оставить просто
C++
1
unsigned long q;
то условие
C++
1
while (q)
может и не выполниться (допустим инициализация 0)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2011, 12:37     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования
Еще ссылки по теме:

Вывод десятичного числа в двоичном виде C++
C++ Из десятичного числа получить букву
Перевод длинного десятичного числа в шестнадцатиричное C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.04.2011, 12:37     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования #9
q=A перед циклом или через do ...while
Yandex
Объявления
21.04.2011, 12:37     Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования
Ответ Создать тему
Опции темы

Текущее время: 07:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru