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

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

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2010, 21:41
Ответы с готовыми решениями:

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

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

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

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

16
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
08.09.2010, 21:45 2
White Luna, используй преобразование типов аргументов.
0
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
08.09.2010, 21:46  [ТС] 3
Nameless One, можешь напомнить, это что такое
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
08.09.2010, 21:49 4
C++
1
2
3
4
int x = 5;
double d1 = x; // Неявное преобразование типов
double d2 = (double)x; // Явное преобразование типов в стиле С
double d3 = static_cast<double>(x); // Явное преобразование типов в стиле С++
Тебе, если я не ошибаюсь, нужно преобразовывать аргументы к типу double.
0
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
08.09.2010, 21:52  [ТС] 5
Цитата Сообщение от Nameless One Посмотреть сообщение
[CPP]
ошибаюсь, нужно преобразовывать аргументы к типу double.
а для чего? *изв туплю сегодня сильно*
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
08.09.2010, 22:02 6
Цитата Сообщение от White Luna Посмотреть сообщение
а для чего?
Для того, что у pow нет перегруженной версии с целочисленным основанием.
0
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
08.09.2010, 23:22  [ТС] 7
хм теперь он у меня считает но в ответ явно что то не то выводит
пример ввожу : число 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 8
Цитата Сообщение от White Luna
к примеру есть число abc в n-ой с. с. мы его должны сначало перевести в N= a*n^2+b*n^1+c*n^0
а потом чтобы перевести в нужную нам с. с допустим q мы должны N разделить на q (нужную нам систему счисления) и остатки записать как число
N равно abc и одного деления не хватит

это из десятичной в двоичную
число 5 в 101
число 16 в 10000
Код
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 минут
Код
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 минут
Код
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
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 08:47  [ТС] 9
Цитата Сообщение от 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
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
09.09.2010, 11:17 10
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 11
Цитата Сообщение от White Luna
а можешь показать куда мне в прогу нужно встатвить последнюю структуру и изменения символа на число
у тебя в проге не хватает функции, которая принимает запись в одной системе, подходящий чистый буфер для записи в другой системе (сначала можно без длин их делать, но длины нужны, чтобы не делать уязвимый код), потом исходная система счисления и конечная система счисления

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

структуру ты описываешь вверху, а определяешь внутри такой функции преобразования (вверху удобнее контролировать структуру, и расширять её, если нужно увеличить возможности)
0
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 14:55  [ТС] 12
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Эксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
09.09.2010, 15:26 13
Цитата Сообщение от White Luna Посмотреть сообщение
easybudda, ссылки почему то не открываются, вернее не показывают прогу, а переходят на какой то поиск по крайней мере у ми
Ага, не задалось что-то...
Перевод чисел в определённую систему
Перевод текста в произвольную систему счисления
0
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.09.2010, 15:51  [ТС] 14
easybudda, я посмотрела, но что то я их плохо понимаю
0
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
17.09.2010, 23:01  [ТС] 15
не понимаю
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
17.09.2010, 23:22 16
Цитата Сообщение от White Luna Посмотреть сообщение
не понимаю
А чего не понимаете - угадать нужно?
0
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
20.09.2010, 01:59  [ТС] 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
#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
20.09.2010, 01:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2010, 01:59
Помогаю со студенческими работами здесь

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

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

Перевод систем счисления
Здравствуйте,помогите пожалуйста доработать программу перевода числа в разные системы...

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru