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

Перевести в 16 ричную систему счисления - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.73
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
26.12.2011, 18:10     Перевести в 16 ричную систему счисления #1
Помогите написать программу перевода из 8 ричной системы счисления в шестнадцатирничную

в интернете нашел программу переводящую из 10 в 16 , а мне надо чтобы из 8 ричной в 16 ричную , помогите кто может

Pascal
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
program algoritm;
uses crt;
var i,ost,des,n,l:integer;
s,s1,sbox:string;
begin
{Алгоритм перевода}
 Writeln('Введите десятичное число:');
 read(des);
 n:=0;
 i:=0;
 s:='';
 repeat
  inc(n);
  inc(i);
  ost:=des mod 16;//остаток
  des:=des div 16;//целая часть
  if ost>=10 then
   begin
    if ost=10 then s:=s+'A';
    if ost=11 then s:=s+'B';
    if ost=12 then s:=s+'C';
    if ost=13 then s:=s+'D';
    if ost=14 then s:=s+'E';
    if ost=15 then s:=s+'F';
   end
  else
   begin
    s:=s+IntToStr(ost);
   end;
 until des=0;
{Переворачиваем содержимое}
n:=1;
l:=length(s);
for i:=1 to (l div 2) do
 begin
 sbox:=s[n];
 s[n]:=s[l+1-n];
 s[l+1-n]:=sbox[1];
 inc(n);
 end;
writeln('Шестнадцатиричное число: ',s);
end.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 18:10     Перевести в 16 ричную систему счисления
Посмотрите здесь:

C++ Простейший алгоритм перевода числа из 10 системы счисления в 16 ричную систему счисления
C++ Перевести число из 4-ричной системы счисления в 18-ричную и наоборот
Перевести число в двоичную систему счисления C++
C++ Проверить корректность числа в заданной системе счисления и перевести в другую систему счисления
C++ Как перевести число с E в десятичную систему счисления?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 16:45     Перевести в 16 ричную систему счисления #21
Прототип. Не проверяет корректность ввода, разделяющий элемент - точка.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <string>
#include <algorithm>
 
int symbol2int(char symbol)
{
    if((symbol >= '0') && (symbol <= '9'))
        return 0 + static_cast<int>(symbol) - static_cast<int>('0');
    else if((symbol >= 'A') && (symbol <= 'F'))
        return 10 + static_cast<int>(symbol) - static_cast<int>('A');
    else if((symbol >= 'a') && (symbol <= 'f'))
        return 10 + static_cast<int>(symbol) - static_cast<int>('a');
    else 
        return 0;
}
 
char int2symbol(int num)
{
    if(num < 10)
        return '0' + num;
    else
        return 'a' + num - 10;
}
 
char periodBin2hexSymbol(std::string period)
{
    int num = 0, count = 0;
    for(std::string::iterator it = period.end() - 1; count < 4; ++count, --it)
        num += (*it - '0') << count;
    return int2symbol(num);
}
    
std::string oct2bin(std::string oct)
{
    std::string bin;
    for(std::string::iterator it = oct.begin(); it != oct.end(); ++it)
    {
        std::string per;
        int num = symbol2int(*it);
        for(int count = 0; count < 3; ++count, num >>= 1)
            per = static_cast<char>((num & 1) + '0') + per;
        bin = bin + per;
    }
    size_t it = bin.find('1');
    if(static_cast<int>(it) != 0)
        bin.erase(0, it);
    return bin;
}
 
std::string& beginBinCorrection(std::string &bin, int period)
{
    while(bin.length() % period)
        bin = '0' + bin;
    return bin;
}
 
std::string& endBinCorrection(std::string &bin, int period)
{
    while(bin.length() % period)
        bin = bin + '0';
    return bin;
}
 
std::string bin2hex(std::string bin)
{
    beginBinCorrection(bin, 4);
    std::string hex;
    for(std::string::iterator it = bin.begin(); it != bin.end(); it += 4)
    {
        std::string period;
        period.insert(0, bin, (it - bin.begin()), 4);
        hex = hex + periodBin2hexSymbol(period);
    }
    return hex;
}
    
std::string oct2hex(std::string oct)
{
    size_t posPoint = oct.find('.');
    
    if(posPoint == std::string::npos)
        return bin2hex(oct2bin(oct));
        
    std::string beforePoint;
    std::string afterPoint;
    
    beforePoint.insert(0, oct, 0, posPoint);
    afterPoint.insert(0, oct, posPoint + 1, oct.size() - posPoint - 1);
    afterPoint = oct2bin(afterPoint);
    beginBinCorrection(afterPoint, 3);
    endBinCorrection(afterPoint, 4);
    afterPoint = bin2hex(afterPoint);
    
    return bin2hex(oct2bin(beforePoint)) + '.' + afterPoint;
}
 
int main()
{
    std::string oct;
    std::cin >> oct;
    std::cout << oct2hex(oct) << std::endl;
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 16:57  [ТС]     Перевести в 16 ричную систему счисления #22
Спасибо большое ! столько писали ) но я запустил ее , окно открывается я ввожу и оно закрывается (
как это исправить
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 17:03     Перевести в 16 ричную систему счисления #23
Как и предыдущую, добавить cstdlib и в функции main перед return 0 прописать system("pause");
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 17:13  [ТС]     Перевести в 16 ричную систему счисления #24
систем пауз написал а cstdlib куда добавить

Добавлено через 4 минуты
добавить то добавил но около систем пауз останавливается и усе ( ошибку дает
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 17:14     Перевести в 16 ричную систему счисления #25
C++
1
#include <cstdlib>
В самое начало

Добавлено через 1 минуту
Такой
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <cstdlib>
#include <iostream>
#include <string>
#include <algorithm>
 
int symbol2int(char symbol)
{
    if((symbol >= '0') && (symbol <= '9'))
        return 0 + static_cast<int>(symbol) - static_cast<int>('0');
    else if((symbol >= 'A') && (symbol <= 'F'))
        return 10 + static_cast<int>(symbol) - static_cast<int>('A');
    else if((symbol >= 'a') && (symbol <= 'f'))
        return 10 + static_cast<int>(symbol) - static_cast<int>('a');
    else 
        return 0;
}
 
char int2symbol(int num)
{
    if(num < 10)
        return '0' + num;
    else
        return 'a' + num - 10;
}
 
char periodBin2hexSymbol(std::string period)
{
    int num = 0, count = 0;
    for(std::string::iterator it = period.end() - 1; count < 4; ++count, --it)
        num += (*it - '0') << count;
    return int2symbol(num);
}
    
std::string oct2bin(std::string oct)
{
    std::string bin;
    for(std::string::iterator it = oct.begin(); it != oct.end(); ++it)
    {
        std::string per;
        int num = symbol2int(*it);
        for(int count = 0; count < 3; ++count, num >>= 1)
            per = static_cast<char>((num & 1) + '0') + per;
        bin = bin + per;
    }
    size_t it = bin.find('1');
    if(static_cast<int>(it) != 0)
        bin.erase(0, it);
    return bin;
}
 
std::string& beginBinCorrection(std::string &bin, int period)
{
    while(bin.length() % period)
        bin = '0' + bin;
    return bin;
}
 
std::string& endBinCorrection(std::string &bin, int period)
{
    while(bin.length() % period)
        bin = bin + '0';
    return bin;
}
 
std::string bin2hex(std::string bin)
{
    beginBinCorrection(bin, 4);
    std::string hex;
    for(std::string::iterator it = bin.begin(); it != bin.end(); it += 4)
    {
        std::string period;
        period.insert(0, bin, (it - bin.begin()), 4);
        hex = hex + periodBin2hexSymbol(period);
    }
    return hex;
}
    
std::string oct2hex(std::string oct)
{
    size_t posPoint = oct.find('.');
    
    if(posPoint == std::string::npos)
        return bin2hex(oct2bin(oct));
        
    std::string beforePoint;
    std::string afterPoint;
    
    beforePoint.insert(0, oct, 0, posPoint);
    afterPoint.insert(0, oct, posPoint + 1, oct.size() - posPoint - 1);
    afterPoint = oct2bin(afterPoint);
    beginBinCorrection(afterPoint, 3);
    endBinCorrection(afterPoint, 4);
    afterPoint = bin2hex(afterPoint);
    
    return bin2hex(oct2bin(beforePoint)) + '.' + afterPoint;
}
 
int main()
{
    std::string oct;
    std::cin >> oct;
    std::cout << oct2hex(oct) << std::endl;
    system("pause");
 
    return 0;
}
останавливается?
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 17:23  [ТС]     Перевести в 16 ричную систему счисления #26
да ввожу что нибудь и все консольная строка исчезает (
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 17:26     Перевести в 16 ричную систему счисления #27
колянчик1712, что именно вы вводите?
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 17:28  [ТС]     Перевести в 16 ричную систему счисления #28
числа

Добавлено через 1 минуту
а в последнем варианте который вы присылали программа останавливается на system("pause"); и выдает ошибку
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 17:30     Перевести в 16 ричную систему счисления #29
колянчик1712, еще раз. Какие. Числа. Вы. Вводите.?
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 17:32  [ТС]     Перевести в 16 ричную систему счисления #30
любые хоть простые , хоть дробные
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 17:34     Перевести в 16 ричную систему счисления #31
колянчик1712, число напишите сюда, какое вы вводите.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2011, 17:37     Перевести в 16 ричную систему счисления
Еще ссылки по теме:

C++ Перевести с десятичной в двоичную систему счисления
C++ Перевести число с 10 ичной системы счисления в 8 ричную
Перевод из 10-тичной в 16-ричную систему счисления C++

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

Или воспользуйтесь поиском по форуму:
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 17:37  [ТС]     Перевести в 16 ричную систему счисления #32
да я ввожу любое число и программа вылетает
Yandex
Объявления
27.12.2011, 17:37     Перевести в 16 ричную систему счисления
Ответ Создать тему
Опции темы

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