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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.98
Весло
0 / 0 / 0
Регистрация: 20.04.2011
Сообщений: 12
#1

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

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

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

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++
Здравствуйте. Очень интересует меня вопрос: как перевести большое число (до 2^128), представленное в виде строки из 10-ричной СС в число...

Перевод десятичного числа в двоичное - C++
вот, что я написал #include<iostream> #include<locale.h> using namespace std; int main(){ setlocale(LC_ALL,"rus"); int digit;...

Преобразование десятичного числа в дробь - C++
Собственно не могу придумать код реализации десятичного числа в дробь(например 0.75 = 1/3), может кто подкинет идейку?=)

Определить разрядность десятичного числа - C++
2.Программа ждет ввода числа и в зависимости от количества цифр в числе выдает сообщение об их разрядности: трехзначное, пятизначное и т.д.

Преобразование десятичного числа в двоичное - C++
Написать консольное приложение которое преобразует введенное пользователем с клавиатуры десятичное число в двоичное =)) помогите))

Перевод десятичного числа в шестнадцатеричное - C++
если не трудно, помогите с прогой, которая преобразует введенное десятичное число в шестнадцатеричное.

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

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

c_str() - возвращает указатель на его внутреннее хранилище символов насколько помню, а здесь мы его применяем потому что без него строка результата не будет выводится? правильно?
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
21.04.2011, 06:47 #6
Цитата Сообщение от Весло Посмотреть сообщение
и последний вопрос: 26-ая строка:
cout << RHEX.c_str();
Если по простому, то это перевод типа String в массив char[] для вывода
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
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);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
21.04.2011, 11:24 #8
Если оставить просто
C++
1
unsigned long q;
то условие
C++
1
while (q)
может и не выполниться (допустим инициализация 0)
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
21.04.2011, 12:37 #9
q=A перед циклом или через do ...while
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2011, 12:37
Привет! Вот еще темы с ответами:

Сложение десятичного и шестнадцатеричного числа - C++
Привет. Есть проблемка. Не правильно складываются 2 числа в разных СС. А именно число K и &amp;V1. Например на скрине он вместо 4 прибавил 10....

Перевод десятичного числа в двоичное - C++
Доброго времени суток всем. Программа выполняет перевод десятиричного числа в двоичное, если остаток от деления a%b==0; записывает что b (в...

Из десятичного числа получить букву - C++
Добрый день. Есть набор чисел в десятичной: 52 51 48 53 50 49 49 51 49 50 48 49 56 54 . Это набор : 43052113120186 если переводить по...

Инвертировать цифры десятичного представления числа - C++
Сделать начало концом. Пример : Ввод данных : 43210 Выход данных : 01234


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.04.2011, 12:37
Ответ Создать тему
Опции темы

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