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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 114, средняя оценка - 4.65
Dimedrol
2363 / 934 / 14
Регистрация: 25.04.2009
Сообщений: 2,636
Записей в блоге: 4
#1

Перевод чисел в определённую систему - C++

05.09.2009, 19:19. Просмотров 14383. Ответов 39

Нужно сделать программу для перевода числа в разные систему то есть вписываешь число и программа должна выдать следующий ответ (мы написали 1010):
Код
двоичная: ИСХОДНОЕ ЧИСЛО
десятичная: 10
шестиричная: 12
шестнадцатеричная: A
Видите, программа должна ещё и узнать в какой системе написанно это число...
Вот я нашёл некоторые коды...только не знаю как их всунуть в эту программу..,

из 2 в 10

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main () {
    char c;
    int result=0;
    cout<<Rus("Введи число:");
    while(scanf("%c",&c) ) {
        if( (c<'0') || (c > '1') ) break;
        result<<=1;
        result+=c-'0';
    };
    printf("\n%d",result);
    getch();
};


из 2 в 16

C++
1
2
3
4
5
6
7
8
void DecToBin (long num,char *bin)
{
int i,j;
char tmp[33];
 
for (i=0; num; num>>=1, i++)tmp[i] = (num&1)?('1'):('0');
for (j=0; j<i; j++) bin[j] = tmp[i-j-1];
}


Из 10 в 2

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
void main(void)
{long a=0, bb=0;
 char str[63];
 int i=0,k,tmp=0;
 clrscr();
 cin>>a;
 bb=a;
 while (bb!=0)
   {if ((abs(bb)%2)!=0)
      str[i]='1';
    else
      str[i]='0';
      ++i;
   bb=abs(bb)/2;
   };
 
   for ( k=0;k<=63;k++)
   if(str[k]!='1')
   str[k]='0';
   strrev(str);
   cout<<endl;
 
   if (a<0)
   {for ( k=0;k<=63;k++)
     {if (str[k]!='1')
      str[k]='1';
      else
      str[k]='0';};
 
    for (i=63;i>=0;i--)
    {if (str[i]=='1')
    str[i]='0';
    else
    {str[i]='1';
    break;}}
   }
   cout<<str<<endl;
   getchar();
   tmp=0;
   for(i=63,k=0;i>=0;i--,k++)
   tmp=tmp+str[i]*pow(2,k);
   getchar();
 
 
}

больше кодов в гугле не нашёл...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2009, 19:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод чисел в определённую систему (C++):

Перевод чисел из 10-й в 2-ю систему счисления - C++
Всем привет. Нужна помощь в доработке след.программы: Программа переводит числа из 10-й в 2-ю систему счисления. При вводе...

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

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

Перевод чисел в Фибоначчиеву систему счисления - C++
Представлением натурального числа N в Фибоначчиевой системе счисления называется набор целых значений-цифр (Dn, Dn-1, …, D2), для которого...

Перевод чисел из двоичной в десятичную систему - C++
Добрый день! Помогите с заданием. Есть файл в котором содержится двоичный код к примеру (0110100001101001) Надо сделать программу...

Перевод чисел в двоичную систему счисления - C++
Помогите найти ошибку : #include&lt;iostream&gt; using namespace std; #include&lt;conio.h&gt; void inp(int n, int k=0, int i=0) { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
05.09.2009, 23:44 #2
Цитата Сообщение от dimjan4 Посмотреть сообщение
из 2 в 16
C++
1
void DecToBin (long num,char *bin)
Что-то мне подсказывает, что это из десятичной в двоичную.
0
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
05.09.2009, 23:52 #3
проблема в том, что число 1010, вообще говоря, может существовать и в 16ричной системе, поэтому "определить" систему прога не сможет для любых комбинаций входных данных
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
06.09.2009, 00:05 #4
Цитата Сообщение от Lolcht0 Посмотреть сообщение
проблема в том, что число 1010, вообще говоря, может существовать и в 16ричной системе,
1. Любое число может существовать в любой системе счисления
2. Название функции говооит само за себя: ДесятичноеВДвоичную
3. Содержимое функции тоже говорит само за себя: применяется метод перевода десятичного числа в двоичную форму.
0
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
06.09.2009, 00:07 #5
Monte-Cristo, я про то, что цифры 1 и 0 есть в любой системе, цифра 2 - только в троичной и далее, цифра F - только в 16чной и далее
0
Delphin_KKC
UNIX-way
710 / 495 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
06.09.2009, 00:28 #6
Любая цифра обязательно есть в "своей" системе и в более ёмкой системе. Но её может не быть в менее ёмких.
Например 7 есть в восьмеричной, десятичной, шестнадцатиричной и всех последующих системах счисления. Но этой цифры нет в троичной и двоичной системах.
0
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
06.09.2009, 00:31 #7
а теперь угадайте, в какой системе это число 1010145F11

ответ
в 256-ричной
0
easybudda
Модератор
Эксперт CЭксперт С++
9625 / 5573 / 947
Регистрация: 25.07.2009
Сообщений: 10,708
06.09.2009, 00:34 #8
Цитата Сообщение от Lolcht0 Посмотреть сообщение
а теперь угадайте, в какой системе это число 1010145F11

ответ
в 256-ричной
А цифра, эквивалентная десятичному числу 255 как в этой системе выглядит?
0
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
06.09.2009, 00:38 #9
проверь -
C++
1
cout<<(char)255<<endl;
0
schdub
2946 / 1291 / 238
Регистрация: 19.01.2009
Сообщений: 3,395
Завершенные тесты: 1
06.09.2009, 00:52 #10
Цитата Сообщение от Lolcht0 Посмотреть сообщение
256-ричная
Думаю, что такой СС нету макс это 36-ричная.

Вот небольшая моя функция конвертирующая число в любую до 36-ричную.

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
// ****************************************************************************
//
// Функция   : ss_dec2other()
// Описание  : конвертирут число в строковое представление указанной
//             системы счисления
// Автор     : [email]oleg.polivets@gmail.com[/email]
//                                  
char *ss_dec2other(
  /* IN  */ long chislo,  // число, которое будет переводится
  /* IN  */ char osn,     // основание CC, в которую будем переводить
  /* OUT */ char *out,    // указатель на буфер куда будет помещатся строка
  /* IN  */ int  out_len) // длина результирующего буфера
{                        
    char hash_table[] = "0123456789abcdefghijklmnopqrstuvwxyz";
    char ch; 
    int  len = 0;
 
    // проверяем основание, в которое будем конвертировать
    if (osn>1 && osn <37 && out_len>0)
    {
        // самый простой алг, который может вообще быть
        while (chislo >= osn && len < out_len-1)
        {
            out[len++]  = hash_table[(chislo % osn)];
            chislo     /= osn;
        }
        // последнее число
        if (chislo==osn)
            out[len++]  = hash_table[chislo-1];
        else
            out[len++]  = hash_table[chislo];
        // разворачиваем выходную строку        
        for (int i = 0, j = len / 2; i < j; i++)
        {
            ch           = out[i];
            out[i]       = out[len-i-1];
            out[len-i-1] = ch;
        }
    }
    // завершающий ноль
    out[len]  = '\0';
 
    return out;
} // ss_dec2other()
1
schdub
2946 / 1291 / 238
Регистрация: 19.01.2009
Сообщений: 3,395
Завершенные тесты: 1
06.09.2009, 01:13 #11
2Lolcht0
Если бы было дествительно так, как Вы говорите, то например, для двоичной CC использовались бы цифры с ASCII кодами 0x00 и 0x01, а для шестнадцатирично использовались бы цифры 0x00, 0x01 ... 0x0f. Но, как все знают, для двоичной СС используются цифры с ASCII кодами 0x30 и 0x31, а для шестнадцатеричной 0x30 ... 0x39, 0x41 ... 0x46.

Добавлено через 7 минут
Цитата Сообщение от Lolcht0 Посмотреть сообщение
проблема в том, что число 1010, вообще говоря, может существовать и в 16ричной системе, поэтому "определить" систему прога не сможет для любых комбинаций входных данных
Тут я с Вами полностью согласен. Разработка программы, с такими требованиями (на данный момент может автор и поправит чего-нибудь, что он забыл написать в задании) невыполнима, как раз из-за неодназначности, о которой Вы говорите. Обязательно, должно указываться основания СС исходного числа.
0
Dimedrol
2363 / 934 / 14
Регистрация: 25.04.2009
Сообщений: 2,636
Записей в блоге: 4
06.09.2009, 10:58  [ТС] #12
polivets, до меня чот не доходит:
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
#include <stdio.h>
#include <conio.h>
#include<iostream.h>
#include<math.h>
#include<windows.h>
 
                                 
char *ss_dec2other(
  /* IN  */ long chislo,  // число, которое будет переводится
  /* IN  */ char osn,     // основание CC, в которую будем переводить
  /* OUT */ char *out,    // указатель на буфер куда будет помещатся строка
  /* IN  */ int  out_len) // длина результирующего буфера
{                        
    char hash_table[] = "0123456789abcdefghijklmnopqrstuvwxyz";
    char ch; 
    int  len = 0;
 
    // проверяем основание, в которое будем конвертировать
    if (osn>1 && osn <37 && out_len>0)
    {
        // самый простой алг, который может вообще быть
        while (chislo >= osn && len < out_len-1)
        {
            out[len++]  = hash_table[(chislo % osn)];
            chislo     /= osn;
        }
        // последнее число
        if (chislo==osn)
            out[len++]  = hash_table[chislo-1];
        else
            out[len++]  = hash_table[chislo];
        // разворачиваем выходную строку        
        for (int i = 0, j = len / 2; i < j; i++)
        {
            ch           = out[i];
            out[i]       = out[len-i-1];
            out[len-i-1] = ch;
        }
    }
    // завершающий ноль
    out[len]  = '\0';
 
    return out;
}
char bufRus[256];
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }      
int main () {
    char c;
    char ss;
    cout<<Rus("Введи число:");
    scanf("%c",&c))
   cout<<Rus("Введи CC:");
    scanf("%ss",&ss))
        ss_dec2other(с,ss,);
    getch();
};
Вот как с этим поступить:
C++
1
2
  /* OUT */ char *out,    // указатель на буфер куда будет помещатся строка
  /* IN  */ int  out_len) // длина результирующего буфера
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
06.09.2009, 11:09 #13
Цитата Сообщение от dimjan4 Посмотреть сообщение
Вот как с этим поступить:
заменить /* OUT */, /* IN */
на

C++
1
2
3
4
5
6
7
#define IN
#define OUT
char *ss_dec2other(
  IN long chislo,  // число, которое будет переводится
  IN char osn,     // основание CC, в которую будем переводить
  OUT char *out,    // указатель на буфер куда будет помещатся строка
  IN int  out_len)
так красивей
0
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
06.09.2009, 11:16 #14
polivets, кто мешает определить цифры как угодно? можно воспользоваться ascii, можно кодировать одну цифру 2мя символами, можно использовать греческий алфавит... я выбрал так, потому что мне так захотелось, и все)) и никто не в силах мне помешать
0
Dimedrol
2363 / 934 / 14
Регистрация: 25.04.2009
Сообщений: 2,636
Записей в блоге: 4
06.09.2009, 12:05  [ТС] #15
Кликните здесь для просмотра всего текста
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
#include <stdio.h>
#include <conio.h>
#include<iostream.h>
#include<math.h>
#include<windows.h>
#define IN
#define OUT
                                 
char *ss_dec2other(
  /* IN  */ long chislo,  // число, которое будет переводится
  /* IN  */ char osn,     // основание CC, в которую будем переводить
  /* OUT */ char *out,    // указатель на буфер куда будет помещатся строка
  /* IN  */ int  out_len) // длина результирующего буфера
{                        
    char hash_table[] = "0123456789abcdefghijklmnopqrstuvwxyz";
    char ch; 
    int  len = 0;
 
    // проверяем основание, в которое будем конвертировать
    if (osn>1 && osn <37 && out_len>0)
    {
        // самый простой алг, который может вообще быть
        while (chislo >= osn && len < out_len-1)
        {
            out[len++]  = hash_table[(chislo % osn)];
            chislo     /= osn;
        }
        // последнее число
        if (chislo==osn)
            out[len++]  = hash_table[chislo-1];
        else
            out[len++]  = hash_table[chislo];
        // разворачиваем выходную строку        
        for (int i = 0, j = len / 2; i < j; i++)
        {
            ch           = out[i];
            out[i]       = out[len-i-1];
            out[len-i-1] = ch;
        }
    }
    // завершающий ноль
    out[len]  = '\0';
 
    return out;
}
char bufRus[256];
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }      
int main () {
    long c;
    char ss;
    int result=0;
    cout<<Rus("Введи число:");
    scanf("%c",&c))
    cout<<Rus("Введи CC:");
    scanf("%ss",&ss))
        char *ss_dec2other(
  IN long c,  // число, которое будет переводится
  IN char ss,     // основание CC, в которую будем переводить
  OUT char *out,    // указатель на буфер куда будет помещатся строка
  IN int  out_len)
    getch();
};

Не идёт...в чём проблема?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2009, 12:05
Привет! Вот еще темы с ответами:

Перевод чисел из файла в римскую систему счисления - C++
Во входном файле in.txt заданы целые числа в диапазоне от 1 до 3999, например: 112 24 9 3517 438 56 Вывести те же числа в...

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

Перевод чисел из двоичной в десятичную систему счисления - C++
Задача в курсаче... =( Помогите пожалуйста

перевод чисел из двоичной в десятичную систему счисления - C++
перевод чисел из двоичной в десятичную систему счисления:help:


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.09.2009, 12:05
Ответ Создать тему
Опции темы

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