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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 61, средняя оценка - 4.67
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
#1

Перевод десятичного числа в двоичное - C++

16.10.2011, 19:35. Просмотров 8871. Ответов 16
Метки нет (Все метки)

Доброго времени суток всем. Программа выполняет перевод десятиричного числа в двоичное, если остаток от деления a%b==0; записывает что b[n] (в динамическом массиве p[n]) равно нулю, если операция выполнялась в первый раз то b[n]=b[0], и так попорядку. n в данном случае равно 2, то есть если мы представляем число 6 как 110, то b[0]=0; b[1]=1; b[2]=1; два динамических массива создаются с целью того, чтобы потом указатель на b[n] использовать в формуле, к примеру k=b[0]*2+b[2]*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
#include <stdafx.h>
#include <iostream>
#include <cmath>
#include <conio.h>
using namespace std;
void main()
{
    int a, d;
    const int n=2;
    int *p=new int[a];
    int *b=new int[n];
    for (int p=0; p<=n; p++)
    for (int i=0; i<=n; i++)
    {
        cin>>p[a]>>p[b];
        if (a%2==0)
        b[n]=b[0];
        p[a]=b[n];
        else 
        b[n]=b[1];
        p[a]=b[n];
    }
    else cout<<endl;
    cout<<p[a]<<endl;
    system ("PAUSE");
}
еще пожалста не говорите ЕТА ТЕМА УЖЕ БЫЛА и тд, в поиске ввел и прочитал наверное практически все про перевод с десятичной в разные системы, динамический массив и тд, начал массивы учить позавчера, пока 50\50.

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

Перевод десятичного числа в двоичное - C++
вот, что я написал #include&lt;iostream&gt; #include&lt;locale.h&gt; using namespace std; int main(){ setlocale(LC_ALL,&quot;rus&quot;); int digit;...

Рекурсия: перевод десятичного числа в двоичное - C++
Здравствуйте. Пытался написать пример перевода десятичного числа в двоичный с использованием рекурсии . Но при запуске выводит просто ноль...

Перевод десятичного числа в двоичное число - C++
Всем доброго времени суток! Собственно вот мой код, который должен переводисть число десятичное в число двоичное. Потестил я его, со...

Перевод отрицательного целого десятичного числа в двоичное - C++
Помогите решить эту задачу

Перевод отрицательного целого десятичного числа в двоичное - C++
Перевод отрицательного целого десятичного числа в двоичное

Перевод десятичного числа в двоичное, результат в массиве типа int - C++
Здравствуйте! Задача: написать программу, которая переводит введенное десятичное число в двоичное число и цифры результата записывает в...

16
talis
792 / 544 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.10.2011, 19:39 #2
Можно меньшей кровью:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main()
{
    int num;
    char array[64];
 
    printf( "> " );
    scanf( "%d", &num );
    printf( "%s", itoa( num, array, 2 ) );
 
    return 0;
}
2
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
16.10.2011, 21:10  [ТС] #3
а на с++?)
0
tig1818c
2 / 2 / 0
Регистрация: 31.07.2010
Сообщений: 18
16.10.2011, 21:45 #4
Ну во-первых, вообще не очень понятно, как компилятор глотает эту чушь:
int *p=new int[a]; for (int p=0; p<=n; p++) - повторное использование идентификатора р и вообще в другом качестве не очень корректно;
int a, d; int *p=new int[a]; - использование неинициализированного значения а; и даже если это будет ноль, зачем заказывать память нулевой длины?!
Массив b логичнее сделать типа BOOLEAN, зачем здесь int, если возможные значения 0 и 1?
И вообще, любое число в машине и так имеет исключительно двоичное представление.
Если я правильно понял из "мы представляем число 6 как 110, то b[0]=0; b[1]=1; b[2]=1",
то цикл для n знаков будет выглядеть примерно так:

for (i=0; i<n; i++) { b[i] = (a & 0x0001<<i) > 0; }

И для числа, например 6, получим b[0]=0; b[1]=1; b[2]=1
1
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
16.10.2011, 23:34  [ТС] #5
ты прав на счет побитового сдвига, так на самом деле и надо, только можно поподробнее пожалуйста?
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
16.10.2011, 23:35 #6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
void convert_to_bin (unsigned decimal_value)
{
   char digit = (decimal_value % 2) ? '1' : '0';
   unsigned next = decimal_value / 2;
   if (next)
   {
      convert_to_bin (next);
   }
   printf("%c", digit);
}
 
int main()
{
   convert_to_bin(123);
   return 0;
}
хотя на лиспе красивше выглядит
2
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
16.10.2011, 23:39 #7
вроде есть короткая функция...
C++
1
itoa(a,buff,2);
и всё там...
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.10.2011, 23:44 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <limits.h>
 
char *int_to_binary_string(char *s, unsigned int n) {
   int i = sizeof(int) * CHAR_BIT;
   char *p = s;
   
   while (i != 0) {
      *p++ = ((n >> --i) & 1) + '0';
   }
   
   *p = 0;
   return s;
}
 
int main() {
   char buf[33] = "";
   printf("%Xh = %sb", 0x815F, int_to_binary_string(buf, 0x815F));
   return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Abbat_90 Посмотреть сообщение
вроде есть короткая функция...
Эта функция не является стандартной.
4
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
17.10.2011, 00:48  [ТС] #9
ребятушки=D на с++ надо) начал изучать программирование именно с него, хоть немного знаю существенные отличия, алгоритм не сильно сложный, но лучше все же на с++!
0
alkagolik
Заблокирован
17.10.2011, 07:08 #10
Цитата Сообщение от fort-_-minor Посмотреть сообщение
ребятушки=D на с++ надо
брюхо не треснет?
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
17.10.2011, 09:33 #11
Вот хороший алгоритм для перевода в q-ичной системе счисления при http://www.cyberforum.ru/cgi-bin/latex.cgi?2\leq q \leq 36
http://www.cyberforum.ru/showthread.php?p=1958349
1
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.10.2011, 10:13 #12
Цитата Сообщение от Thinker Посмотреть сообщение
Вот хороший алгоритм для перевода в q-ичной системе счисления
Для двоичной лучше все таки битовые
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
17.10.2011, 10:15 #13
Цитата Сообщение от fasked Посмотреть сообщение
Для двоичной лучше все таки битовые
Это да, самый лучший вариант с битами. Это я ТС подкинул программу от easybudda для общего случая, может пригодится
0
tig1818c
2 / 2 / 0
Регистрация: 31.07.2010
Сообщений: 18
17.10.2011, 22:31 #14
Насчет использования itoa: если я правильно понял, то просителю требуется не преобразование целого в символьный вид, а именно побитовая раскладка целого в массив, индексы которого соответствуют номеру бита исходного целого. itoa для этого не годится. Можно, конечно, использовать последовательное деление. Но, напомню, алгоритм деления в любом процессоре - вещь весьма сложная. Так зачем зазря есть ресурс? Можно ведь и гланды через ж... удалять, но надо ли?
На мой взгляд для данного случая целесообразно использовать именно побитовый сдвиг либо исходного целого вправо и проверять всегда младший (нулевой) бит, либо шкалу влево,
т.е. для вышеописанных примеров это будет:
1 вариант b[i] = (a>>i & 0x0001) > 0;
2 вариант b[i] = (a & 0x0001<<i) > 0;
Результат в b[i] будет либо TRUE (т.е. 1) если соотв. бит a стоит в 1, либо 0 если это не так.
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.10.2011, 22:37 #15
tig1818c, так и чем #8 не нравится?
0
17.10.2011, 22:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2011, 22:37
Привет! Вот еще темы с ответами:

Перевод десятичного вещественного числа в двоичное путем побитовых операций (Делить на 2 нельзя) - C++
Нужно написать код на С++, который переводит вещественное десятичное число в двоичное с помощью битовых операторов(Сдвиги, &amp;, | и т.п) ...

Преобразование десятичного числа в двоичное - C++
Написать консольное приложение которое преобразует введенное пользователем с клавиатуры десятичное число в двоичное =)) помогите))

Реализовать систему перевода десятичного числа в двоичное не используя деление и остаток от деления - C++
помогите с задачей не пойму как делать Реализовать систему перевода десятичного числа в двоичное не используя деление и остаток от...

Перевод десятичного числа в шестнадцатеричное - C++
если не трудно, помогите с прогой, которая преобразует введенное десятичное число в шестнадцатеричное.


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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