Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/149: Рейтинг темы: голосов - 149, средняя оценка - 4.78
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487

Программа перевода числа из 10 СС в 2 СС

15.02.2010, 15:36. Показов 32799. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У Дейтлов есть задача:
Напишите программу, которая печатает таблицу двоичных, восьмеричных и шестнадцатеричных эквивалентов десятичных в диапазоне от 1 до 256.
Они предлагают следующие инструкции по переводу чисел:
10 СС -> 2 СС


10 СС -> 8 СС


10 СС -> 16 СС


Я для пробы написал код, который переводит десятичную 10 в двоичную 1010. Код очень корявый и не выводит то, что мне надо. Подскажите, в ту ли сторону я иду (уже 3 дня разбираюсь, и никак)?
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
#include<iostream>
using std::cout;
using std::endl;
 
#include<windows>
 
int stepen(int chislo, int stepenChisla)
{
   int chisloVStepeni = 1;
 
   if (stepenChisla == 0)
   {
      chisloVStepeni = 1;
   }
   else
   {
      for (int i = 0; i < stepenChisla; i++)
      {
         chisloVStepeni *= chislo;
      }
   }
 
   return chisloVStepeni;
}
 
int main()
{
   int chisloV10SS; // число в 10 СС, которое будет преобразовано в 2 СС
   int maxStepen2 = 0; // число 2 в максимальной степени
   int s = 0; // значение степени (0...)
   int textMaxStepen2; // проверочное maxStepen2
   int i;
   int cifraChislaV2SS; // очередная цифра числа в 2СС (слева направо)
   int chisloV2SS = 0; // число в 2 СС, полученное прибавлением cifraChislaV2SS
   int ostChislaV10SS; // остаток от числа в 10 СС
   int j;
   int umenshStepen; // уменьшающаяся степень
   int vremOstChislaV10SS;  // хранит временный остаток
 
   for (chisloV10SS = 10; chisloV10SS < 11; chisloV10SS++)
   {
      cout << chisloV10SS << " v 10 CC = ";
 
      while (maxStepen2 < chisloV10SS)
      {
         maxStepen2 = stepen(2, s);
         textMaxStepen2 = stepen(2, (s+1));
 
         if (textMaxStepen2 > chisloV10SS)
         {
            break;
         }
 
         s++;
      }
 
      ostChislaV10SS = chisloV10SS;
      umenshStepen = s;
 
      for (i = 0; i < s; i++)
      {
         if (ostChislaV10SS >= stepen(2, umenshStepen))
         {
            cifraChislaV2SS = ostChislaV10SS / stepen(2, umenshStepen);
         }
 
         if ((cifraChislaV2SS > 0) || (ostChislaV10SS >= stepen(2, umenshStepen)))
         {
            cifraChislaV2SS = 0;
         }
 
         if (cifraChislaV2SS != 0)
         {
            cifraChislaV2SS *= stepen(10, umenshStepen);
         }
 
         chisloV2SS += cifraChislaV2SS;
 
         vremOstChislaV10SS -= stepen(2, umenshStepen);
 
         if (vremOstChislaV10SS > 0)
         {
            ostChislaV10SS -= stepen(2, umenshStepen);
         }
 
         umenshStepen--;
 
      }
 
      cout << chisloV2SS << " v 2 SS " <<endl;
   }
 
   system("pause");
   return 0;
}
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2010, 15:36
Ответы с готовыми решениями:

Программа для перевода числа
Не могу написать программу для перевода числа, введенного пользователем из P -ичной системы счисления в Q -ичную и обратно. Предусмотреть...

Программа перевода десятичного числа (до 10) в двоичное
помогите найти ошибку.простейшая прога перевода десятичного числа(до 10) в двоичное.В отладчике вроде все нормально.а запускаю бред какой...

Программа перевода из 5-ой в десятичную сс (дробные числа)
Прошу очень помощи, лаба завтра(((( вообще ничего в голове не рождается(((( &quot;Напишите программу в Pascal для перевода чисел из...

42
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
19.02.2010, 14:12  [ТС]
Студворк — интернет-сервис помощи студентам
Ошибка на AnsiString Int_To_StrHex(int A)
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 14:25
Заменил я AnsiString на string, и кое-что подправил, теперь вроде бы программа нормально переводит:
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
#include <iostream>
#include <cstring>
using namespace std;
 
 
 
string Int_To_StrHex(int A)
  {
  string S, S1, Str = "0123456789ABCDEF";
  cout << S[0] << endl;
 
  if (A == 0) 
  {
      S1 = "0000";
      return S1;
  }
 
  while(A > 0)
    {
    S += Str[A % 16];
    A = A / 16;
    }
 
  if ((S.size() % 5) == 1) S +=string("000");
  if ((S.size() % 5) == 2) S +=string("00");
  if ((S.size() % 5) == 3) S +=string("0");
 
  for (int I = 0; I < S.size(); I++)
    {
    S1 +=S[S.size() - 1 - I];
    }
 
  return S1;
  }
 
int main()
{
    for(size_t i=0; i<256; ++i)
    {
    string s=Int_To_StrHex(i);
    cout << s.c_str();
    }
    cout << endl; 
    system("pause");
    return 0;
}
0
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
25.02.2010, 08:08  [ТС]
Написал так
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 <iostream>
#include <cmath>
#include<cstring>
#include <iomanip>
using namespace std;
 
int pow(int x, int y)
{
        int n=1;
        while(y--)
                n*=x;
        return n;
}
 
string Int_To_StrHex(int A)
{
   string S, S1, Str = "01234567890ABCDEF";
   cout << S[0] << endl;
 
   if (A == 0)
   {
      S1 = "0000";
      return S1;
   }
 
   while (A > 0)
   {
      S += Str[A % 16];
      A = A / 16;
   }
 
   if ((S.size() % 5) == 1) S += string("000");
   if ((S.size() % 5) == 2) S += string("00");
   if ((S.size() % 5) == 3) S += string("0");
 
   for (int k = 0; k < S.size(); k++)
   {
      S1 += S[S.size() - 1 - k];
   }
 
   return S1;
}
 
int main()
{
        setlocale(LC_ALL, "Russian");
        int etalonChislaV10SS; // эталон числа в 10 СС
        int chisloV10SS;//Число в десятичной СС
        int chisloV2SS = 0;//Искомое число в двоичной CC
        int razrjadChislaV2SS = 0;//Разряд двоичного числа
        int chisloV8SS = 0;  // искомое число в восьмеричной СС
        int razrjadChislaV8SS = 0; // разряд восьмеричного числа
        int chisloV16SS = 0;  // искомое число в восьмеричной СС
        int razrjadChislaV16SS = 0; // разряд восьмеричного числа
 
                cout.setf(ios::left, ios::adjustfield);//Выравнивание по левому краю
 
   cout << setw(12) << "Dec" << setw(12) <<"Bin"  << setw(12) << "Oct"  << setw(12) << "Hex" << endl;
 
   for (chisloV10SS = 1; chisloV10SS <= 256; chisloV10SS++)
   {
        cout << setw(12) << chisloV10SS;
 
        chisloV2SS = 0;
        razrjadChislaV2SS = 0;
        chisloV8SS = 0;
        razrjadChislaV8SS = 0;
        chisloV16SS = 0;
        razrjadChislaV16SS = 0;
 
        etalonChislaV10SS = chisloV10SS;
// преобразование в 2 СС
        while(chisloV10SS > 1)
        {
           chisloV2SS += (chisloV10SS%2) * pow(10, razrjadChislaV2SS);//Присваиваем i-тому разряду остаток от деления
           chisloV10SS /= 2;
           razrjadChislaV2SS++;
        }
 
        chisloV2SS += chisloV10SS * pow(10, razrjadChislaV2SS);
 
        cout << setw(12) << chisloV2SS;
// преобр. в 8 СС
 
        chisloV10SS = etalonChislaV10SS;
        while(chisloV10SS > 1)
        {
           chisloV8SS += (chisloV10SS%8) * pow(10, razrjadChislaV8SS);//Присваиваем i-тому разряду остаток от деления
           chisloV10SS /= 8;
           razrjadChislaV8SS++;
        }
 
        chisloV8SS += chisloV10SS * pow(10, razrjadChislaV8SS);
 
        cout << '0' << setw(12) << chisloV8SS;
// преобр. в 16 СС
        chisloV10SS = etalonChislaV10SS;
 
        string s = Int_To_StrHex(chisloV10SS);
        cout << setw(12) << s.c_str();
 
        chisloV10SS = etalonChislaV10SS;
   }
        system("pause");
        return 0;
}
Только почему-то после вывода числа в 8 СС происходит переход на следующую строку, хотя там нет endl; Почему?

Добавлено через 23 часа 29 минут
Вот, надеюсь, финальный вариант кода:
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 <iostream>
#include <cmath>
#include<cstring>
#include <iomanip>
using namespace std;
 
int pow(int x, int y)
{
        int n=1;
        while(y--)
                n*=x;
        return n;
}
 
string Int_To_StrHex(int A)
{
   string S, S1, Str = "01234567890ABCDEF";
   cout << "0x" << S[0];
 
   if (A == 0)
   {
      S1 = "0000";
      return S1;
   }
 
   while (A > 0)
   {
      S += Str[A % 16];
      A = A / 16;
   }
 
   if ((S.size() % 5) == 1) S += string("000");
   if ((S.size() % 5) == 2) S += string("00");
   if ((S.size() % 5) == 3) S += string("0");
 
   for (int k = 0; k < S.size(); k++)
   {
      S1 += S[S.size() - 1 - k];
   }
 
   return S1;
}
 
int main()
{
        setlocale(LC_ALL, "Russian");
        int etalonChislaV10SS; // эталон числа в 10 СС
        int chisloV10SS;//Число в десятичной СС
        int chisloV2SS = 0;//Искомое число в двоичной CC
        int razrjadChislaV2SS = 0;//Разряд двоичного числа
        int chisloV8SS = 0;  // искомое число в восьмеричной СС
        int razrjadChislaV8SS = 0; // разряд восьмеричного числа
        int chisloV16SS = 0;  // искомое число в восьмеричной СС
        int razrjadChislaV16SS = 0; // разряд восьмеричного числа
 
                cout.setf(ios::left, ios::adjustfield);//Выравнивание по левому краю
 
   cout << setw(12) << "Dec" << setw(12) <<"Bin"  << setw(12) << "Oct"  << setw(12) << "Hex" << endl;
 
   for (chisloV10SS = 1; chisloV10SS <= 256; chisloV10SS++)
   {
        cout << setw(12) << chisloV10SS;
 
        chisloV2SS = 0;
        razrjadChislaV2SS = 0;
        chisloV8SS = 0;
        razrjadChislaV8SS = 0;
        chisloV16SS = 0;
        razrjadChislaV16SS = 0;
 
        etalonChislaV10SS = chisloV10SS;
// преобразование в 2 СС
        while(chisloV10SS > 1)
        {
           chisloV2SS += (chisloV10SS%2) * pow(10, razrjadChislaV2SS);//Присваиваем i-тому разряду остаток от деления (здесь вместо i написано razrjadChislaV2SS)
           chisloV10SS /= 2;
           razrjadChislaV2SS++;
        }
 
        chisloV2SS += chisloV10SS * pow(10, razrjadChislaV2SS);
 
        cout << setw(12) << chisloV2SS;
// преобр. в 8 СС
 
        chisloV10SS = etalonChislaV10SS;
        while(chisloV10SS > 1)
        {
           chisloV8SS += (chisloV10SS%8) * pow(10, razrjadChislaV8SS);//Присваиваем i-тому разряду остаток от деления
           chisloV10SS /= 8;
           razrjadChislaV8SS++;
        }
 
        chisloV8SS += chisloV10SS * pow(10, razrjadChislaV8SS);
 
        cout << '0' << setw(12) << chisloV8SS;
// преобр. в 16 СС
        chisloV10SS = etalonChislaV10SS;
 
        string s = Int_To_StrHex(chisloV10SS);
        cout << setw(12) << s.c_str() << endl;
 
        chisloV10SS = etalonChislaV10SS;
   }
        system("pause");
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.02.2010, 08:08

Программа перевода десятичного числа в двоичное
Помогите пожалуйста решить задачу. Написать программу, которая прелбразует введённое пользователем десятичное число в двоичное. Я учусь...

Программа перевода числа из 10ой системы в двоичную
Сам код: #include &lt;iostream&gt; using namespace std; int main() { long int i; int value; cout &lt;&lt; &quot;Vvedite chislo: &quot;; cin...

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

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

Программа перевода числа в 8-ричную систему счисления
Ребят ,помогите ,пожалуйста Нужно сделать программу перевода положительного целого числа в 8-ричную систему счисления ,результат подать...


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

Или воспользуйтесь поиском по форуму:
43
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru