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

Dec to bin - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 59, средняя оценка - 4.71
KapaRZA
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 10
01.02.2011, 14:23     Dec to bin #1
Помогите написать программу перевода из 10-ой системы счисления в 2-ую, через массив.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
01.02.2011, 15:49     Dec to bin #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;
}
VenCarbon
32 / 31 / 3
Регистрация: 14.12.2010
Сообщений: 158
01.02.2011, 16:25     Dec to bin #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;
}
С использованием динамических массивов. Экономит память.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16832 / 5253 / 322
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
01.02.2011, 17:44     Dec to bin #4

Не по теме:

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

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

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



Добавлено через 2 минуты
Кстати, обе программы не выполнили поставленной задачи. Задача ставится как "перевести" число из 10-й системы в 2-ную. А ваши программы просто распечатывают некую величину в двоичное представление. Задачей перевода числа из 10-й записи в машинное представление в первой программе занимается компилятор, а во второй - cin (а точнее, оператор <<)
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
01.02.2011, 17:57     Dec to bin #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;
}
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16832 / 5253 / 322
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
01.02.2011, 18:12     Dec to bin #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
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
01.02.2011, 18:24     Dec to bin #7
Цитата Сообщение от Evg Посмотреть сообщение
В обоих случаях код отработает одинаково, а потому название DecBin попросту не соответсвует действию "перевод числа из десятичной записи в двоичную"
Т.е. ты имеешь в виду, что int всегда представлен только в десятичном виде или я не совсем понял что значит "код отработает одинаково"
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16832 / 5253 / 322
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
01.02.2011, 18:27     Dec to bin #8
int всегда представлен во внутреннем машинном виде. Когда ты используешь cin, то cin переводит строковое представление во внутреннее машинное (которое, как мы знаем, двоичное, хотя это никакой роли не играет). Т.е. то, что сделал cin, должен делать ты (при условии, что автору действительно нужно то, о чём написано в задании). Я привёл выше ссылку, почитай её.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2011, 13:06     Dec to bin
Еще ссылки по теме:

Компиляция в bin C++
HEX в BIN C++
C++ Bin to dec типа float

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16832 / 5253 / 322
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
20.02.2011, 13:06     Dec to bin #9
M128K145, вот сюда Неочевидные ответы на простые вопросы добавил раздел "8. Немного о преобразовании чисел между системами исчисления". Если после прочтения ты поймёшь свою ошибку, то буду считать, что статья написана хорошо
Yandex
Объявления
20.02.2011, 13:06     Dec to bin
Ответ Создать тему
Опции темы

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