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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.73
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
#1

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

26.12.2011, 18:10. Просмотров 6037. Ответов 31
Метки нет (Все метки)

Помогите написать программу перевода из 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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 18:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевести в 16 ричную систему счисления (C++):

Простейший алгоритм перевода числа из 10 системы счисления в 16 ричную систему счисления - C++
Помогите написать самый простой алгоритм перевода из 10 системы счисления в 16 ричную систему счисления! Мне нужен именно самый простенький...

Перевод в 12-ричную систему счисления - C++
помогите , подскажите как правильно перевести

Преобразование чисел в 15-ричную систему счисления - C++
Помогите пожалуйста написать код для перевода с 10-тичной в 15-тиричную систему счисления на языке С++,пожалуйста.

Перевод из 10-тичной в 16-ричную систему счисления - C++
Как перевести из 10 в 16 систему, каким-нибудь простым способом?

Реализовать перевод в 16-ричную систему счисления - C++
Как реализовать такой же перевод,но в 16-ричную с.с? void OctalInt::ConvertToVector() { int div = 10; int buf = octalNumber; ...

Перевод числа из двоичной в 16-ричную систему счисления - C++
Ввод целого числа в двоичной системе счисления, т.е. последовательность цифр 0 и 1. Составить программу перевода этого числа в...

31
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.12.2011, 19:26 #16
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <cstdlib>
 
int main()
{
    unsigned int oct;
    std::cin >> std::oct >> oct;
    std::cout << std::hex << oct << std::endl;
    system("pause");
    return 0;
}
1
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
26.12.2011, 19:31  [ТС] #17
работает ) а она щас из 8 ричной в 16 переводит ?
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.12.2011, 19:32 #18
Да...
1
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
26.12.2011, 19:33  [ТС] #19
Спасибо вам огромное !!!! от всей души так сказать )
0
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 14:35  [ТС] #20
Сегодня показал а препод говорит что и дробные должен переводить . 7.14 например ввел он мне 7 показывает . Можете изменить программу чтобы и дробные переводил ?
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 16:45 #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;
}
2
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 16:57  [ТС] #22
Спасибо большое ! столько писали ) но я запустил ее , окно открывается я ввожу и оно закрывается (
как это исправить
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 17:03 #23
Как и предыдущую, добавить cstdlib и в функции main перед return 0 прописать system("pause");
1
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 17:13  [ТС] #24
систем пауз написал а cstdlib куда добавить

Добавлено через 4 минуты
добавить то добавил но около систем пауз останавливается и усе ( ошибку дает
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 17:14 #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;
}
останавливается?
1
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 17:23  [ТС] #26
да ввожу что нибудь и все консольная строка исчезает (
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2011, 17:26 #27
колянчик1712, что именно вы вводите?
1
колянчик1712
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 41
27.12.2011, 17:28  [ТС] #28
числа

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

Перевести число с 10 ичной системы счисления в 8 ричную - C++
Дана задача составить программу: Которая будет выполнять одно действие деление чисел в восьмеричной системы счисления. Входные данные:...

Перевести число из 4-ричной системы счисления в 18-ричную и наоборот - C++
Перевести число из 4-ричной системы счисления в 18-ричную и наоборот

Проверить корректность числа в заданной системе счисления и перевести в другую систему счисления - C++
На вычислительной практике дали такое задание: С клавиатуры вводятся 2 положительных целых числа: число A (в системе счисления с...

Перевести из 16-ой в 2-ую систему счисления - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; using namespace std; char* HEXtoBIN(long a, char *bin) { ...


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

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

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