С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/163: Рейтинг темы: голосов - 163, средняя оценка - 4.61
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402

Перевод систем счислений

08.09.2010, 21:41. Показов 30757. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Надо написать программу которая будет переводить число из одной произвольной системы счисления в другую.

P. S. знаю, что таких задач по сети много, и даж есть на форуме, но мне они показались очень громоздкими, нам препод сказал делать по такой методики

к примеру есть число abc в n-ой с. с. мы его должны сначало перевести в N= a*n^2+b*n^1+c*n^0
а потом чтобы перевести в нужную нам с. с допустим q мы должны N разделить на q (нужную нам систему счисления) и остатки записать как число

я начала делать но у меня выходит проблема с компилятором мне выдает что, при pow: неодназначный вызов перегруженной функции

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
#include "stdafx.h"
#include "locale.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "math.h"
 
int _tmain()
{
    setlocale (LC_ALL, "Russian");
    const int u=50;
int t, w;
char k[u];
printf ("Введите исходное число :\n");
scanf ("%s", &k);
 
printf ("Введите систему счисления введеного числа :\n");
scanf("%d", &t);
 
printf ("Введите систему счисления в которую хотите перевести число введеное с клавиатуры :\n");
scanf ("%d", &w);
 
printf ("Число в новой системе счисления : %d \n",w);
 
int N, i;
 int e=strlen(k);
for ( i=0; i<(e-1); i++) – поменятоь наоборот от
{
  N=k[i]*pow(t,(e-1));
  ++i;
  e=(e-1)-i;
}
printf ("%d", N);
 
_getch();
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.09.2010, 21:41
Ответы с готовыми решениями:

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

Перевод систем счисления.
Здравствуйте, сразу оговорюсь: занимаюсь программированием три дня. Я вот пытался сделать программу по переводу числа из 16-ричной системы...

Перевод систем счисления
Здраствуйте, на входе имеется некое десятеричное число (примеры:1 / 2,8 / 0,123456) как перевести в другую систему счисления пробовал...

16
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
08.09.2010, 21:45
White Luna, используй преобразование типов аргументов.
0
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
08.09.2010, 21:46  [ТС]
Nameless One, можешь напомнить, это что такое
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
08.09.2010, 21:49
C++
1
2
3
4
int x = 5;
double d1 = x; // Неявное преобразование типов
double d2 = (double)x; // Явное преобразование типов в стиле С
double d3 = static_cast<double>(x); // Явное преобразование типов в стиле С++
Тебе, если я не ошибаюсь, нужно преобразовывать аргументы к типу double.
0
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
08.09.2010, 21:52  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение
[CPP]
ошибаюсь, нужно преобразовывать аргументы к типу double.
а для чего? *изв туплю сегодня сильно*
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
08.09.2010, 22:02
Цитата Сообщение от White Luna Посмотреть сообщение
а для чего?
Для того, что у pow нет перегруженной версии с целочисленным основанием.
0
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
08.09.2010, 23:22  [ТС]
хм теперь он у меня считает но в ответ явно что то не то выводит
пример ввожу : число 5 в 10 с.с. перевести в 2. выдает -858993460, даж если на этом эпате проги должен выводится промежуточные результат N там не может быть такого большого числа
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
#include "stdafx.h"
#include "locale.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "math.h"
 
int _tmain()
{
        setlocale (LC_ALL, "Russian");
        const int u=50;
int t, w;
char k[u];
printf ("Введите исходное число :\n");
scanf ("%s", &k);
 
printf ("Введите систему счисления введеного числа :\n");
scanf("%d", &t);
 
printf ("Введите систему счисления в которую хотите перевести число введеное с клавиатуры :\n");
scanf ("%d", &w);
 
printf ("Число в новой системе счисления : %d \n",w);
 
int N, i;
 int e=strlen(k);
double d1 = t;
double d2 = e;
for ( i=0; i<(d2-1); i++) – поменятоь наоборот от
{
  N=k[i]*pow(d1,(d2-1));
  ++i;
  d2=(d2-1)-i;
}
printf ("%d", N);
 
_getch();
        return 0;
}
Добавлено через 1 час 10 минут
кто-нить может подсказать где в проге я допустила ошибку?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
09.09.2010, 04:00
Цитата Сообщение от White Luna
к примеру есть число abc в n-ой с. с. мы его должны сначало перевести в N= a*n^2+b*n^1+c*n^0
а потом чтобы перевести в нужную нам с. с допустим q мы должны N разделить на q (нужную нам систему счисления) и остатки записать как число
N равно abc и одного деления не хватит

это из десятичной в двоичную
число 5 в 101
число 16 в 10000
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
5 | 2
4   2 | 2
1   2    1 | 2
    0    0   0
         1
 
16 | 2
16   8 | 2
 0   8   4 | 2
     0   4   2 | 2
         0   2   1 | 2
             0   0   0
                 1
Добавлено через 7 минут
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
27 в 8ричной -> 2
 
N = 2 * 8^1 + 7 * 8^0 = 2 * 8 + 7 = 16 + 7 = 23 - это десятичная
 
23 | 2
22   11 | 2
 1   10   5 | 2
      1   4   2 | 2
          1   2   1 | 2
              0   0   0
                  1
                  
27(8) = 10111(2)
Python
1
2
3
4
5
>>> 0o27
23
>>> bin(0o27)
'0b10111'
>>>
Добавлено через 6 минут
Code
1
2
3
4
5
6
7
8
9
10
11
12
101(14) -> x(16)
 
N = 1 * 14^2 + 0 * 14^1 + 1 * 14^0 = 196 + 14 = 210 - десятичная
 
210 | 16
208   13 | 16
  2    0   0
      13
      
13 = D
 
101(14) = D2(16)
Добавлено через 5 минут
C++
1
for ( i=0; i<(d2-1); i++)
если ты хочешь выполнить цикл d2 раз, нужно писать

C++
1
for (i = 0; i < d2; i++)
Добавлено через 5 минут
C++
1
N=k[i]*pow(d1,(d2-1));
ты умножаешь символ '5' на степень, в результате умножается не пять на степень, а код символа '5' на степень

Python
1
2
3
4
5
6
7
8
9
>>> ord('5')
53
>>> hex(ord('5'))
'0x35'
>>> print("%c" % 0x35)
5
>>> print("%c" % 53)
5
>>>
Добавлено через 5 минут
то есть сначала тебе нужно перевести символ в число (и это может быть не только цифра, это могут быть буквы, а могут быть ещё символы), для этого задаётся структура

C
1
2
3
4
5
6
7
8
9
10
11
struct charnum {
    char ch[16];
    int num[16];
};
 
...
 
    struct charnum pattern = {
        "0123456789abcdef",
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }
    };
вот, а дальше ты берёшь символ и переводишь его с помощью этой структуры в число, а потом число уже умножаешь
0
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 08:47  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
Python
1
2
3
4
5
6
7
8
9
>>> ord('5')
53
>>> hex(ord('5'))
'0x35'
>>> print("%c" % 0x35)
5
>>> print("%c" % 53)
5
>>>
Добавлено через 5 минут
то есть сначала тебе нужно перевести символ в число (и это может быть не только цифра, это могут быть буквы, а могут быть ещё символы), для этого задаётся структура

C
1
2
3
4
5
6
7
8
9
10
11
struct charnum {
    char ch[16];
    int num[16];
};
 
...
 
    struct charnum pattern = {
        "0123456789abcdef",
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }
    };
вот, а дальше ты берёшь символ и переводишь его с помощью этой структуры в число, а потом число уже умножаешь
а можешь показать куда мне в прогу нужно встатвить последнюю структуру и изменения символа на число
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
09.09.2010, 11:17
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
//////////////////////////////////////////////////////////////////////////////
//  написать программу которая будет переводить число из одной произвольной 
//  системы счисления в другую.
//////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
 
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////
int symb_to_dig(char symb)
{
    if('0' <= symb && symb <= '9')
    {
        return symb - '0';
    }
    if('a' <= symb && symb <= 'z')
    {
        return symb - 'a' + 0xa;
    }
    return 0;
}
//////////////////////////////////////////////////////////////////////////////
char dig_to_symb(int dig)
{
    if(0 <= dig && dig <= 9)
    {
        return dig + '0';
    }
    const int lett_dig_a = 10;
    const int lett_dig_z = 'z' - 'a' + lett_dig_a;
    if(lett_dig_a <= dig && dig <= lett_dig_z)
    {
        return dig - lett_dig_a + 'a';
    }
    return '?';
}
//////////////////////////////////////////////////////////////////////////////
T_str  transform(T_str num_str, int begin_radix, int end_radix)
{    
    int val                   = 0;    
    int begin_radix_in_order  = 1;
 
    for(T_str::const_reverse_iterator  rev_dig_it = num_str.rbegin(); 
        rev_dig_it != num_str.rend(); ++rev_dig_it)
    {
        val += symb_to_dig(tolower(*rev_dig_it)) * begin_radix_in_order;
        begin_radix_in_order *= begin_radix;
    }
 
    T_str  res_str;
    while(val)
    {        
        res_str.insert(0, 1, dig_to_symb(val % end_radix));     
        val /= end_radix;
    }
    return  res_str;
}
//////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale("")); 
    for(;;)
    {
        std::cout << std::endl
                  << std::endl
                  << std::endl
                  << "Число в исходной системе счисления:   ";        
        T_str num_str;
        std::cin >> num_str;        
 
        int n1;
        do
        {
            std::cout << "Основание исходной системы счисления: ";        
            std::cin >> n1;    
        }while(n1 < 2);
 
        int n2;
        do
        {
            std::cout << "Основание целевой системы счисления:  ";    
            std::cin >> n2;    
        }while(n2 < 2);
 
        std::cout << std::endl
                  << "Число в целевой системе счисления:    "
                  << transform(num_str, n1, n2)
                  << std::endl;     
    }
}
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
09.09.2010, 11:33
Цитата Сообщение от White Luna
а можешь показать куда мне в прогу нужно встатвить последнюю структуру и изменения символа на число
у тебя в проге не хватает функции, которая принимает запись в одной системе, подходящий чистый буфер для записи в другой системе (сначала можно без длин их делать, но длины нужны, чтобы не делать уязвимый код), потом исходная система счисления и конечная система счисления

структура нужна, чтобы отвязать символы от таблицы аски, потому что на системе, в которой может выполняться программа, может быть не аски (ascii) и там может не повезти и цифры могут быть в каком-нибудь другом порядке (а структура вшивает в программу фиксированный набор, однозначный)

структуру ты описываешь вверху, а определяешь внутри такой функции преобразования (вверху удобнее контролировать структуру, и расширять её, если нужно увеличить возможности)
0
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 14:55  [ТС]
easybudda, ссылки почему то не открываются, вернее не показывают прогу, а переходят на какой то поиск по крайней мере у ми

Добавлено через 1 минуту
Mr.X, есщл честно, то мне мало что понятно в проге, а в общем вообще понять не могу где там что

Добавлено через 34 минуты
Теперь вопрос такой почему у ми может не выводить в проге N это как бы последний вывод, а его прога как бы ни в каком виде не выводит

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
#include "stdafx.h"
#include "locale.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "math.h"
 
int _tmain()
{
        setlocale (LC_ALL, "Russian");
        const int u=50;
int t, w;
char k[u];
printf ("Введите исходное число :\n");
scanf ("%s", &k);
 
printf ("Введите систему счисления введеного числа :\n");
scanf("%d", &t);
 
printf ("Введите систему счисления в которую хотите перевести число введеное с клавиатуры :\n");
scanf ("%d", &w);
 
printf ("Число в новой системе счисления : %d \n",w);
 
int N, i;
 int e=strlen(k);
double d1 = t;
double d2 = e;
 
for ( i=0; i<(d2-1); i++) 
{
  N=k[i]*pow(d1,(d2-1));
  ++i;
  d1=(d2-1)-i;
}
scanf_s ("%d", N);
 
_getch();
        return 0;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
09.09.2010, 15:26
Цитата Сообщение от White Luna Посмотреть сообщение
easybudda, ссылки почему то не открываются, вернее не показывают прогу, а переходят на какой то поиск по крайней мере у ми
Ага, не задалось что-то...
Перевод чисел в определённую систему
Перевод текста в произвольную систему счисления
0
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 15:51  [ТС]
easybudda, я посмотрела, но что то я их плохо понимаю
0
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
17.09.2010, 23:01  [ТС]
не понимаю
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.09.2010, 23:22
Цитата Сообщение от White Luna Посмотреть сообщение
не понимаю
А чего не понимаете - угадать нужно?
0
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
20.09.2010, 01:59  [ТС]
Надеюсь это был риторический вопрос, эта моя вариации проги глючит зависает после ввода и выдает много смайлов в строчу и виснет по крайней мере так у ми
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
#include "stdafx.h"
#include "locale.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "math.h"
#include "iostream"
 
 
 
 
int _tmain()
{
    setlocale (LC_ALL, "Russian");
    const int u=50;
    int t, w;
    char k[u]="";
        printf ("Введите исходное число :\n");
        scanf ("%s", k);
 
        printf ("Введите систему счисления введеного числа :\n");
        scanf ("%d", &t);
 
        printf ("Введите систему счисления в которую хотите перевести число введеное с клавиатуры :\n");
        scanf ("%d", &w);
 
        printf ("Число в новой системе счисления :\n");
    int N = 0, i, j;
    int d2 = strlen(k);
        for (i = (d2 - 1); i >= 0 ; i--) 
            {
                int d1 = k[i] - '0';
 
                        int t = 1;
                        for (int j = 0; j <i ;j++)
                        t = t * d1;
                        
                N = N + d1 * t;
            };
printf ("%d",&N);
    do
{
        int q = N - (w * (N / w));
        printf ("%s",&q);
    }
    while (w < (N / w));
        
 system("pause");
 exit(0);
_getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.09.2010, 01:59
Помогаю со студенческими работами здесь

Перевод систем счисления в C++
У меня скоро контрольная по этой теме(будем писать программу на C++),но в этой теме я очень слаб(очень-очень). Поэтому я прошу у вас...

Перевод систем счисления
Дано число в системе счисления по основанию A. Нужно перевести его в систему счисления по основанию A B . Input Со стандартного...

перевод систем счисления
1. Задание: Напишите программу перевода чисел из 2 системы в 10. 2.Задание: Напишите программу выполнения арифметических операций в...

Перевод систем счисления
Здравствуйте,помогите пожалуйста доработать программу перевода числа в разные системы счисления.Нужно чтобы заместо цифр 10 11 12 13 14...

перевод чисел из систем счисления
Составить программу перевода чисел из десятичной системы счисления в систему с основанием: 12; 31; 3; и программу обратного перевода


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru