Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/52: Рейтинг темы: голосов - 52, средняя оценка - 4.69
KapaRZA
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 10
1

Dec to bin

01.02.2011, 14:23. Просмотров 9519. Ответов 8
Метки нет (Все метки)

Помогите написать программу перевода из 10-ой системы счисления в 2-ую, через массив.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2011, 14:23
Ответы с готовыми решениями:

Dec to Bin
Здравствуйте. Скажите, какие у меня есть ошибки в коде. static int...

Bin to dec типа float
Есть бинарное число вида 111111.1001, кое надо перевести в десятичную систему...

Перевод чисел Bin - Oct - Dec - Hex
Существуют ли функции для перевода числа (или строки из цифр) из одной системы...

Из Hex в Dec
Перевел из чара в инт и что-то не вьеду как теперь возвести . ...

Из HEX в DEC
Господа привет. Помогите нубу из F6FD hex получить -522 dec. int a = 0xFD;...

8
x1Mike7x
218 / 131 / 19
Регистрация: 06.11.2010
Сообщений: 234
01.02.2011, 15:49 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    int i=0, X, b[100];
    X=64;
    while (X>1)
    {
        b[i]=X%2;
        X/=2;
        i++;
    };
    b[i]=X;
    while (i>=0)
    {
        printf("%i", b[i]);
        i--;
    };
    return 0;
}
1
VenCarbon
33 / 32 / 7
Регистрация: 14.12.2010
Сообщений: 159
01.02.2011, 16:25 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
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
 
int main()
{
    float dec1;
    cin >> dec1;
    float size1 = ceil(log(dec1)/log(2.0));
    int size = (int) size1;
    int *binArray = new int[size];
    int dec = (int) dec1;
    int i = 0;
    while (dec) {
        binArray[i] = dec % 2;
            dec /= 2;
            i++;
    }
    for (i = size - 1; i >= 0; i--) {
        cout << binArray[i];
    }
    system("PAUSE");
    return 0;
}
С использованием динамических массивов. Экономит память.
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 20,000
Записей в блоге: 30
01.02.2011, 17:44 4

Не по теме:

Цитата Сообщение от VenCarbon Посмотреть сообщение
С использованием динамических массивов. Экономит память
Ради экономии 100 байт памяти у тебя в программу подцепились реализации функций log, ceil, malloc (косвенно растёт из new), free (косвенно должно вырасти из delete, который ты позабыл). Не говоря уж о том, что код на Си++ будет жрать памяти больше, чем код на Си (как минимум из-за использования cin, cout). Так что вопрос экономии памяти весьма спорный.

Ну и если ввести decl=1, то логарифм от единицы оказывается 0, а потому sizel оказывается равным нулю. Если ввести decl=0, то логарифм от нуля неопределён, а потому что на это скажет твоя программа - никому неизвестно. Вот сколько лезет ошибок от непонятного желания сэкономить на спичках.

Так же непонятно, как твоя программа отреагирует на ввод отрицательного числа (а программа предыдущего оратора просто выдаст неправильное значение).



Добавлено через 2 минуты
Кстати, обе программы не выполнили поставленной задачи. Задача ставится как "перевести" число из 10-й системы в 2-ную. А ваши программы просто распечатывают некую величину в двоичное представление. Задачей перевода числа из 10-й записи в машинное представление в первой программе занимается компилятор, а во второй - cin (а точнее, оператор <<)
1
M128K145
Эксперт JavaЭксперт С++
8326 / 3547 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
01.02.2011, 17:57 5
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
#include <iostream>
int BinDec(int* bin, int size)
{
    int rez = 0, i;
    for(i = size - 1; i >= 0; --i)
        rez += bin[i]<<i;
    return rez;
}
int* DecBin(int chislo, int size)
{
    int i;
    int* bin = new int[size];
    for(i = size - 1; i >= 0; --i)
        bin[i] = (chislo>>i) & 1;
    return bin;
}
int main()
{
    setlocale(LC_ALL, "Russian");
    int chislo, size(sizeof(chislo)*8);
    std::cout<<"Введите число:\n> ";
    std::cin>>chislo;
    int* bin = DecBin(chislo, size);
    for(int i = size - 1; i >= 0; --i)
    {
        if(!((i + 1) % 8))
            std::cout<<' ';
        std::cout<<bin[i];
    }
    std::cout<<std::endl;
    std::cout<<BinDec(bin, size);
    system("pause");
    return EXIT_SUCCESS;
}
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 20,000
Записей в блоге: 30
01.02.2011, 18:12 6
M128K145, твоя программа тоже не занимается переводом. Она просто печатает число (т.е. перевод из внутреннего машинного представления в тестовый двоичный вид). Преобразование должно делаться ИЗ ТЕКСТА В ТЕКСТ, а не из int'а в текст или в массив int'ов, являющихся отображением текста.

Если я опять невнятно выразился, то могу с твоим же примером написать такой код:

C++
1
2
3
4
chislo = 10;
DecBin(chislo, size); // преобразование 10 -> 2
chislo = 0x10;
DecBin(chislo, size); // преобразование 16 -> 2
В обоих случаях код отработает одинаково, а потому название DecBin попросту не соответсвует действию "перевод числа из десятичной записи в двоичную"

Хотя сдаётся мне, что у автора не правильно поставлена задача. Наверняка ему (а точнее, преподу) нужен не перевод, а просто печать в двоичном представлении

Добавлено через 3 минуты
Вот тут этот вопрос обсуждали более досконально. Блин, реально пора об этом статью писать, а то люди ведь так и не понимают этого
http://www.cyberforum.ru/cpp/thread17010.html
1
M128K145
Эксперт JavaЭксперт С++
8326 / 3547 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
01.02.2011, 18:24 7
Цитата Сообщение от Evg Посмотреть сообщение
В обоих случаях код отработает одинаково, а потому название DecBin попросту не соответсвует действию "перевод числа из десятичной записи в двоичную"
Т.е. ты имеешь в виду, что int всегда представлен только в десятичном виде или я не совсем понял что значит "код отработает одинаково"
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 20,000
Записей в блоге: 30
01.02.2011, 18:27 8
int всегда представлен во внутреннем машинном виде. Когда ты используешь cin, то cin переводит строковое представление во внутреннее машинное (которое, как мы знаем, двоичное, хотя это никакой роли не играет). Т.е. то, что сделал cin, должен делать ты (при условии, что автору действительно нужно то, о чём написано в задании). Я привёл выше ссылку, почитай её.
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 20,000
Записей в блоге: 30
20.02.2011, 13:06 9
M128K145, вот сюда Неочевидные ответы на простые вопросы добавил раздел "8. Немного о преобразовании чисел между системами исчисления". Если после прочтения ты поймёшь свою ошибку, то буду считать, что статья написана хорошо
1
20.02.2011, 13:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2011, 13:06

Long hex > dec
Никак не могу понять, как перевести большое 16-ричное в 10-ричное число. Вся...

S dec na hex, ukazatel
Pomogite pojaluista! Etot kod menyaet 10noe chislo na 16noe. Nado izmenit eto...

Создать 2 структуры: DEC и POL - C++
Cоздать 2 структуры: DEC, состоящую из названия точки и её декартовых координат...


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

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

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