Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/39: Рейтинг темы: голосов - 39, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 20.04.2011
Сообщений: 12
1

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

20.04.2011, 02:00. Показов 6957. Ответов 8
Метки нет (Все метки)

Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования (без простого вывода числа в шестнадцатиричной)... помогите пожалуйста очень надо, я полный новичек, хотелось бы посмотреть как может выглядеть работающая программа... алгоритм по идее такой:

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

Как реализовать? заранее благодарен...
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2011, 02:00
Ответы с готовыми решениями:

Преобразование десятичного числа в шестнадцатиричное
Как написать функцию которая преобразут десятиричные числа в шеснадцатиричные?

Преобразование десятичного числа в шестнадцатиричное
Нашел на форуме вот такую программку: string inttohex(int a) { string tmp(""); do ...

Перевод длинного десятичного числа в шестнадцатиричное
Здравствуйте. Очень интересует меня вопрос: как перевести большое число (до 2^128),...

Суть преобразования десятичного двоичнокодированного числа
В чем заключается суть преобразования десятичного двоичнокодированного числа в символьный вид?

8
return (true);
1976 / 1111 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
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;
}
1
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];
}
выводит результат в обратной последовательности, насколько я понял?

Заранее огромное спасибо.
0
return (true);
1976 / 1111 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
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];
}
выводит результат в обратной последовательности, насколько я понял?
Именно так, по алгоритму перевода порядок байт от младших к старшим. Мы же сначала формируем строку путём добавления, а потом переворачиваем её
1
0 / 0 / 0
Регистрация: 20.04.2011
Сообщений: 12
20.04.2011, 21:42  [ТС] 5
Благодарю Вас еще раз!

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

c_str() - возвращает указатель на его внутреннее хранилище символов насколько помню, а здесь мы его применяем потому что без него строка результата не будет выводится? правильно?
0
return (true);
1976 / 1111 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
21.04.2011, 06:47 6
Цитата Сообщение от Весло Посмотреть сообщение
и последний вопрос: 26-ая строка:
cout << RHEX.c_str();
Если по простому, то это перевод типа String в массив char[] для вывода
1
3081 / 2402 / 255
Регистрация: 11.03.2009
Сообщений: 5,444
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;
0
return (true);
1976 / 1111 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
21.04.2011, 11:24 8
Если оставить просто
C++
1
unsigned long q;
то условие
C++
1
while (q)
может и не выполниться (допустим инициализация 0)
0
3081 / 2402 / 255
Регистрация: 11.03.2009
Сообщений: 5,444
21.04.2011, 12:37 9
q=A перед циклом или через do ...while
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2011, 12:37

Алгоритм преобразования десятичного числа в вещественное
Здравствуйте помогите пожалуйста разобрать алгоритм, понимаю что в вещественном числе 32 разряда...

Определить функцию преобразования десятичного числа
Определить функцию преобразования десятичного числа n в СС( двоичную, восьмеричную,...

Как получить шестнадцатиричное число из десятичного?
a:=255; Как получить b:='ff'

7. Написать программу преобразования введенного десятичного числа в восьмеричный формат
Написать программу преобразования введенного десятичного числа в восьмеричный формат циклическая...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.