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

Перевод числа в бинарное - C++

Восстановить пароль Регистрация
 
valeriy007
65 / 10 / 2
Регистрация: 27.10.2014
Сообщений: 341
01.07.2015, 17:02     Перевод числа в бинарное #1
Перевести заданное в десятичной системе число a в двоичную систему, используя функцию перевода. При передаче значения в функцию пользуйтесь указателями.

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
#include <iostream>
#include "conio.h"
 
int *convertToBin(int *x)
{
    int *a = new int[50];
    int i = 1;
    x[0] = *x % 2;
    while (*x != 1)
    {
        *x = *x / 2;
        a[i] = *x % 2;
        i++;
    }
    return a;
}
 
int main()
{
    int a;
    std::cin >> a;
 
    int *arr = convertToBin(&a);
 
    for (int i = 0; i < 5; i++) 
        std::cout << arr[i] << std::endl;
 
    system("pause");
    return 0;
}
Компилятор:
Первый этап обработки исключения по адресу 0x00984760 в tren.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x0046B000.
Необработанное исключение по адресу 0x00984760 в tren.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x0046B000.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MansMI
1047 / 844 / 205
Регистрация: 08.01.2012
Сообщений: 3,026
01.07.2015, 17:12     Перевод числа в бинарное #2
x[0] = *x % 2; ???
valeriy007
65 / 10 / 2
Регистрация: 27.10.2014
Сообщений: 341
01.07.2015, 17:18  [ТС]     Перевод числа в бинарное #3
Цитата Сообщение от MansMI Посмотреть сообщение
x[0] = *x % 2; ???
упс...
C++
1
2
3
4
5
6
7
8
9
10
11
12
int *convertToBin(int *x)
{
    int *a = new int[50];
    int i = 0;
    while (*x != 1)
    {
        a[i] = *x % 2;
        *x = *x / 2;
        i++;
    }
    return a;
}
ну там вот так, но все равно чето не правильно...
isobo531
42 / 42 / 11
Регистрация: 11.11.2014
Сообщений: 322
01.07.2015, 17:24     Перевод числа в бинарное #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
int perevod_d (int dec, int bin)
{
    cout << "Число: ";
    cin >> dec;
 
    for (int j = 0; dec > 0; j++)
    {
        bin += (dec % 2) * pow(10.0, j);
        dec /= 2;
    }
    return bin;
}
Добавлено через 44 секунды
Переделай на указатели.
MansMI
1047 / 844 / 205
Регистрация: 08.01.2012
Сообщений: 3,026
01.07.2015, 17:49     Перевод числа в бинарное #5
число то какое? и на какой строке прерывается?

Добавлено через 23 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char* convertToBin(int *x)
{
    char *a = new char[50];
    a+=49;
    *a--=0;
    do
    {
        *a-- = *x % 2+48;
        *x/=2;
    }while (*x);
    return ++a;
}
 
void main()
{
    int a;
    std::cin >> a;
    char *str = convertToBin(&a);
    std::cout << str << std::endl;
    system("pause");
}
ящюр
63 / 63 / 9
Регистрация: 15.03.2013
Сообщений: 394
Записей в блоге: 1
03.07.2015, 00:03     Перевод числа в бинарное #6
Вот еще вариантик.
Кликните здесь для просмотра всего текста
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
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
int binSize = 0;
 
char* convertToBin(const int *x)
{
    int c = *x; 
    binSize = 0;// Разрядность числа в двоичной форме
    if (c == 0 ) {
        binSize = 1;
    }
    else
    { 
        int stepen2 = 1;    // Степень 2ки
        for (int k = 1; stepen2 <= c; k++)
        {
            binSize = k;
            stepen2 *= 2;
        }
    }
    char *a = new char[binSize];
    memset(a, '0', binSize);
    if (c == 0 || c==1) { // Если число 0 или 1
        a[binSize-1] = (c == 0) ? '0' : '1'; // Заполняем один элемент массива
        return a;
    }
    c = *x;
    for (int k = (binSize-1); k >= 0; k--)
        {
            a[k] = (c & 1) ? '1' : '0'; // Проверяем 1й бит. Если 1ка то заполняем "1" иначе "0"
            c = c >> 1; // Битовый сдвиг вправо на один бит
        }
    return a;
}
 
void main()
{
    int a;
    std::cin >> a;
    char* res (convertToBin(&a));
    for (int k = 0; k < binSize; k++)
    {
        cout << res[k];
    }
    cout << endl;
    system("pause");
}


вариант со 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 <cstdio>
#include <iostream>
#include <string>
using namespace std;
int binSize = 0;
 
string convertToBin(const int *x)
{
    string Result = "";// Результат
    string temp = "";// Временная переменная
    int c = *x; 
    binSize = 0;// Разрядность числа в двоичной форме
    if (c == 0 ) { // Если число=0 то устанавливаем длину в один разряд
        binSize = 1;
    }
    else
    { 
        int stepen2 = 1;    // Степень 2ки
        for (int k = 1; stepen2 <= c; k++)  // Вичисляем разрядность числа
        {
            binSize = k;
            stepen2 *= 2;
        }
    }
    if (c == 0 || c==1) { // Если число 0 или 1
        Result= ((c == 0) ? "0" : "1"); // Заполняем один элемент массива
        return Result;
    }
    c = *x;
    for (int k = (binSize-1); k >= 0; k--)
        {
            temp =((c & 1) ? "1" : "0"); // Проверяем 1й бит. Если 1ка то заполняем "1" иначе "0"
            Result = temp.append(Result);
            c = c >> 1; // Битовый сдвиг вправо на один бит
        }
    return Result;
}
 
void main()
{
    int a;
    std::cin >> a;
    
    cout << convertToBin(&a)<< endl;
    system("pause");
}
Yandex
Объявления
03.07.2015, 00:03     Перевод числа в бинарное
Ответ Создать тему
Опции темы

Текущее время: 21:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru