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

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

15.02.2010, 15:36. Показов 32360. Ответов 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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
17.02.2010, 02:20
Студворк — интернет-сервис помощи студентам
M128K145, ну я помню, в какой-то ветке писал что-то вроде
printf("%d", ( intval & 1 << i ) ? 1 : 0);
Вы же мне проще способ подсказали
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
17.02.2010, 03:20
Цитата Сообщение от PointsEqual Посмотреть сообщение
2-->10

C++
1
2
3
4
5
6
7
8
9
10
void DecToBin(unsigned int x){ 
   do 
      { 
        if (x%2==0)
        cout<<"0";
        else
        cout<<"1";
        x/=2;
      } while (x>=1);
}
Мне одному кажется, что эта функция печатает цифры двоичного числа в обратном порядке?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
17.02.2010, 10:51
Nameless One, судя по коду так и происходит
0
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
18.02.2010, 08:13  [ТС]
Я написал код, который переводит десятичную 10 в двоичную 1010 и 8-ричную 12.
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
#include <iostream>
using namespace std;
 
#include<time>
#include<math>
 
int pow(int x, int y)
{
        int n=1;
        while(y--)
                n*=x;
        return n;
}
 
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 << "Vvedite chislo" << endl;
        cin >> chisloV10SS;
        etalonChislaV10SS = chisloV10SS;
// преобразование в 2 СС
        while(chisloV10SS > 1)
        {
           chisloV2SS += (chisloV10SS%2) * pow(10, razrjadChislaV2SS);//Присваиваем i-тому разряду остаток от деления
           chisloV10SS /= 2;
           razrjadChislaV2SS++;
        }
 
        chisloV2SS += chisloV10SS * pow(10, razrjadChislaV2SS);
 
        cout << "Chislo v dvoichnoj SS: " << endl << chisloV2SS << endl;
// преобр. в 8 СС
 
        chisloV10SS = etalonChislaV10SS;
        while(chisloV10SS > 1)
        {
           chisloV8SS += (chisloV10SS%8) * pow(10, razrjadChislaV8SS);//Присваиваем i-тому разряду остаток от деления
           chisloV10SS /= 8;
           razrjadChislaV8SS++;
        }
 
        chisloV8SS += chisloV10SS * pow(10, razrjadChislaV8SS);
 
        cout << "Chislo v vosmerichnoj SS: " << endl << chisloV8SS << endl;
 
        system("pause");
        return 0;
}
А вот как мне быть с 16-ричной? Там же будут буквы А, B и тд. Мне сказали, что без строк тут не обойтись. Но странно то, что в книге про это речи еще не было. Автор намекает на самообразование что ли? Подскажите хотя бы начало пути :smile
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
18.02.2010, 10:50
Цитата Сообщение от Nameless One Посмотреть сообщение
Для вывода чисел в десятичной, восьмеричной и шестнадцатеричной СС используются, соответственно, манипуляторы потока вывода dec, oct, hex. Данная программа выведет введенное число сначала в шестнадцатеричной, потом в восьмеричной СС:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int main()
{
        setlocale(LC_ALL, "Russian");
 
        int decs;//Число в десятичной СС
 
        cin >> decs;
        
        cout << hex << decs << endl << oct << decs << endl;
        system("pause");
        return 0;
}
- стандартный способ. Если же хочешь реализовать сам, то придется работать со строками
0
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
18.02.2010, 12:39  [ТС]
cout << hex << decs << endl << oct << decs << endl;
decs мы вводим. А откуда берутся hex и oct?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
18.02.2010, 12:52
Цитата Сообщение от fs444 Посмотреть сообщение
decs мы вводим. А откуда берутся hex и oct?
hex и oct - это не переменные, а манипуляторы, указывающие, что следующее число (decs), выводится, в соответствующей системе счисления. Т.е.
C++
1
cout << hex << decs << endl;
выведет число в шестнадцатеричной СС
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
18.02.2010, 14:23
Цитата Сообщение от fs444 Посмотреть сообщение
decs мы вводим. А откуда берутся hex и oct?
Вводить тоже не обязательно в decs
0
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
18.02.2010, 14:58  [ТС]
Слепил я такую вот штуковину:
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
#include <iostream>
using namespace std;
 
#include<time>
#include<math>
 
int pow(int x, int y)
{
        int n=1;
        while(y--)
                n*=x;
        return n;
}
 
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; // разряд восьмеричного числа
 
   for (chisloV10SS = 1; chisloV10SS <= 256; chisloV10SS++)
   {
      chisloV2SS = 0;
      chisloV8SS = 0;
      chisloV16SS = 0;
 
      razrjadChislaV2SS = 0;
      razrjadChislaV8SS = 0;
      razrjadChislaV16SS = 0;
 
      cout << "10 SS: " << chisloV10SS << endl;
      etalonChislaV10SS = chisloV10SS;
// преобразование в 2 СС
      while(chisloV10SS > 1)
      {
         chisloV2SS += (chisloV10SS%2) * pow(10, razrjadChislaV2SS);//Присваиваем i-тому разряду остаток от деления
         chisloV10SS /= 2;
         razrjadChislaV2SS++;
      }
 
      chisloV2SS += chisloV10SS * pow(10, razrjadChislaV2SS);
 
      cout << "2 SS: " << chisloV2SS << endl;
      chisloV10SS = etalonChislaV10SS;
 
// преобр. в 8 СС
 
      chisloV10SS = etalonChislaV10SS;
 
      while(chisloV10SS > 1)
      {
         chisloV8SS += (chisloV10SS%8) * pow(10, razrjadChislaV8SS);//Присваиваем i-тому разряду остаток от деления
         chisloV10SS /= 8;
         razrjadChislaV8SS++;
      }
 
      chisloV8SS += chisloV10SS * pow(10, razrjadChislaV8SS);
 
      cout << "8 SS: " << chisloV8SS << endl;
 
      chisloV10SS = etalonChislaV10SS;
   }
 
      system("pause");
      return 0;
}
Но когда я добавляю в конец цикла for код
C++
1
2
3
4
// преобр. в 16 СС
cout << "16 SS: ";
cout << hex << chisloV10SS << endl << endl;
chisloV10SS = etalonChislaV10SS;
Вывод сразу портиться. Почему так получается? Дело в моем незнании манипуляторов потоков?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
18.02.2010, 16:19
fs444, что значит "портится"?
Вот пример использования манипулятора hex. В правильности вывода легко убедиться.

Добавлено через 12 минут
Кстати, если ты использовал манипулятор, задающий СС, то весь дальнейший вывод будет продолжаться в этой СС. Т.е., чтобы снова выводить числа в десятичной СС, тебе нужно указать манипулятор dec.

Добавлено через 3 минуты
Существует манипулятор, аналогичный dec, hex и oct - setbase(int). В скобках пишешь СС, в которой ты хочешь выводить числа, например, setbase(8) - аналогично манипулятору oct. Так как этот манипулятор имеет параметр, для его использования необходимо подключить заголовочный файл iomanip. К сожалению, с помощью этого манипулятора тоже нельзя задать вывод в двоичной СС, а только в восьмеричной (setbase(8)), десятичной (по умолчанию) и шестнадцатеричной. Если ты укажешь любую другую СС, то вывод будет производится в десятичной СС
0
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
19.02.2010, 07: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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
using namespace std;
 
#include<time>
#include<math>
//#include<pthread>
 
int pow(int x, int y)
{
        int n=1;
        while(y--)
                n*=x;
        return n;
}
 
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; // разряд восьмеричного числа
 
   for (chisloV10SS = 1; chisloV10SS <= 256; chisloV10SS++)
   {
        cout << "10 SS: " << chisloV10SS << endl;
 
        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 << "2 SS: " << endl << chisloV2SS << endl;
// преобр. в 8 СС
 
        chisloV10SS = etalonChislaV10SS;
        while(chisloV10SS > 1)
        {
           chisloV8SS += (chisloV10SS%8) * pow(10, razrjadChislaV8SS);//Присваиваем i-тому разряду остаток от деления
           chisloV10SS /= 8;
           razrjadChislaV8SS++;
        }
 
        chisloV8SS += chisloV10SS * pow(10, razrjadChislaV8SS);
 
        cout << "8 SS: " << endl << chisloV8SS << endl;
// преобр. в 16 СС
        chisloV10SS = etalonChislaV10SS;
        cout << "16 SS: ";
        cout << hex << chisloV10SS << dec << endl << endl;
        chisloV10SS = etalonChislaV10SS;
   }
        system("pause");
        return 0;
}
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 08:22
Цитата Сообщение от fs444 Посмотреть сообщение
Оуе, я сделал это
А теперь сделай перевод обратно
0
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
19.02.2010, 08:33  [ТС]
А теперь сделай перевод обратно
На самом деле, уже легко Потому что алгоритм я понял. Сначала тяжело шло.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 08:34
Цитата Сообщение от fs444 Посмотреть сообщение
Из 2-ной во все остальные?
Ага, а еще и из 8-ной и 16-ной
0
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
19.02.2010, 09:02  [ТС]
На самом деле, чуствую, что есть решения намного рациональнее моего Но я сделал, чтобы работало просто =)

Добавлено через 24 минуты
Кстати, в консоли умещаются только числа с 215 до 256. Как сделать, чтобы умещались с 1 до 256?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 09:10
Запускаешь программу из командной строки, после имени программы пишешь | more
Например:
Code
1
2
C:\Documents and Settings\Nameless>"C:\Documents and Settings\Nameless\Мои докум
енты\Visual Studio 2008\Projects\TestCon\Debug\TestCon.exe" | more
И жмешь на Enter, когда хочешь увидеть, что там дальше))
Ну и, как вариант, можно сделать вывод в файл
0
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
19.02.2010, 09:18  [ТС]
Запускаешь программу из командной строки, после имени программы пишешь | more
Понятно. Но я немного изменил код, и теперь цифры выводятся в виде таблички.

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
#include <iostream>
using namespace std;
 
#include<time>
#include<math>
#include<iomanip>
using std::setw;
using std::setiosflags;
using std::setprecision;
 
int pow(int x, int y)
{
        int n=1;
        while(y--)
                n*=x;
        return n;
}
 
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 << "Dec" << "\t" << "Bin" << "\t" << "Oct" << "\t" << "Hex" << endl;
 
   for (chisloV10SS = 1; chisloV10SS <= 256; chisloV10SS++)
   {
        cout << chisloV10SS << "\t";
 
        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 << chisloV2SS << "\t";
// преобр. в 8 СС
 
        chisloV10SS = etalonChislaV10SS;
        while(chisloV10SS > 1)
        {
           chisloV8SS += (chisloV10SS%8) * pow(10, razrjadChislaV8SS);//Присваиваем i-тому разряду остаток от деления
           chisloV10SS /= 8;
           razrjadChislaV8SS++;
        }
 
        chisloV8SS += chisloV10SS * pow(10, razrjadChislaV8SS);
 
        cout << chisloV8SS << "\t";
// преобр. в 16 СС
        chisloV10SS = etalonChislaV10SS;
        cout << hex << chisloV10SS << dec << endl;
        chisloV10SS = etalonChislaV10SS;
   }
        system("pause");
        return 0;
}
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 09:40
fs444, можно так:
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
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
 
int pow(int x, int y)
{
        int n=1;
        while(y--)
                n*=x;
        return n;
}
 
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;
        cout << "0x" << hex << setw(12) << chisloV10SS << dec << endl;
        chisloV10SS = etalonChislaV10SS;
   }
        system("pause");
        return 0;
}
cout.setf(ios::left, ios::adjustfield) - выравнивание по левому краю
setw(int) - определение размера поля вывода переменной
Для того, чтобы выделить числа в 8-ной и 16-ной СС, перед числом в 8-ной выводим '0', перед числом в 16-ной - "0x"
0
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
19.02.2010, 13:30  [ТС]
Да, этот вариант интереснее

Добавлено через 3 часа 46 минут
А вот вопрос про строки. У меня код
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
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include<windows>
 
AnsiString Int_To_StrHex(int A)
  {
  AnsiString S, S1, Str = "0123456789ABCDEF";
 
  if (A == 0) S = "0";
 
  while(A > 0)
    {
    S = S + Str[(A % 16) + 1];
    A = A / 16;
    }
 
  if ((S.Length() % 5) == 1) S = S + "000";
  if ((S.Length() % 5) == 2) S = S + "00";
  if ((S.Length() % 5) == 3) S = S + "0";
 
  for (int I = 1; I < (S.Length() + 1); I++)
    {
    S1 = S1 + S[S.Length() + 1 - I];
    }
 
  return S1;
  }
 
int main()
{
    Int_To_StrHex(10);
 
    system("pause");
    return 0;
}
выдает "Declaration syntax error". Что неправильно?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 13:55
Хм, даже и не знаю, у меня вообще компилятор AnsiString не понимает. А в какой строчке ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2010, 13:55

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

Программа перевода числа из 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-ричную систему счисления ,результат подать...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru