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

Dec to bin

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

Помогите написать программу перевода из 10-ой системы счисления в 2-ую, через массив.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2011, 14:23
Ответы с готовыми решениями:

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

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

Усовершенствование декодера Bin > Dec и обратно
Здравствуйте! Я работаю над проектом декодера из бинарной системы в десятичную и обратно. Создал 2...

Усовершенствование кода декодера BIN > DEC
Здравствуйте! У меня есть проект, декодер из бинарной системы в десятичную. #include <iostream>...

8
221 / 134 / 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
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
21121 / 8137 / 628
Регистрация: 30.03.2009
Сообщений: 22,455
Записей в блоге: 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
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 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
21121 / 8137 / 628
Регистрация: 30.03.2009
Сообщений: 22,455
Записей в блоге: 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 минуты
Вот тут этот вопрос обсуждали более досконально. Блин, реально пора об этом статью писать, а то люди ведь так и не понимают этого
https://www.cyberforum.ru/cpp/thread17010.html
1
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
01.02.2011, 18:24 7
Цитата Сообщение от Evg Посмотреть сообщение
В обоих случаях код отработает одинаково, а потому название DecBin попросту не соответсвует действию "перевод числа из десятичной записи в двоичную"
Т.е. ты имеешь в виду, что int всегда представлен только в десятичном виде или я не совсем понял что значит "код отработает одинаково"
0
Evg
Эксперт CАвтор FAQ
21121 / 8137 / 628
Регистрация: 30.03.2009
Сообщений: 22,455
Записей в блоге: 30
01.02.2011, 18:27 8
int всегда представлен во внутреннем машинном виде. Когда ты используешь cin, то cin переводит строковое представление во внутреннее машинное (которое, как мы знаем, двоичное, хотя это никакой роли не играет). Т.е. то, что сделал cin, должен делать ты (при условии, что автору действительно нужно то, о чём написано в задании). Я привёл выше ссылку, почитай её.
0
Evg
Эксперт CАвтор FAQ
21121 / 8137 / 628
Регистрация: 30.03.2009
Сообщений: 22,455
Записей в блоге: 30
20.02.2011, 13:06 9
M128K145, вот сюда Неочевидные ответы на простые вопросы добавил раздел "8. Немного о преобразовании чисел между системами исчисления". Если после прочтения ты поймёшь свою ошибку, то буду считать, что статья написана хорошо
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2011, 13:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Из bin в dec и из oct в dec
нужно создать что-то типо программного конвертера, есть edit, там вводится число, например...

Из Dec в Bin
Доброе время суток,только недавно начал изучать C#,решил написать простенький калькулятор,а теперь...

Dec-bin конвертор
Задача состоит в том, что необходимо с помощью монитора порта при указании числа в десятичной...


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

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

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