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

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

08.09.2010, 21:41. Показов 30767. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru