Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 05.04.2015, 16:36   #1
eragorn2013
 
Регистрация: 05.04.2015
Сообщений: 7
По умолчанию Автоматическое ограничение массива

Добрый день. Подскажите, пожалуйста, по следующему вопросу.

Пытаюсь поупражняться с одномерными массивами, задача не сложная: нужно написать программку перевода из десятичной системы счисления в двоичную и результат вывести на экран. Вот такой незамысловатый код у меня получился:
Код:
#include <iostream>
#include <locale.h>

using namespace std;

int main()

{
    setlocale(LC_CTYPE,"Russian");

    int number;
    cout<<"Введите десятичное число:";
    cin>>number;

    int array[128];

    for(int i=0;i<128;i++)
    {
    array[i]=number%2;

    number/=2;
    }
    for(int i=128;i>0;i--)
    {
    cout<<array[i];
    }
    return 0;
}
проблема тут лишь одна, при выводе на экран результата в двоичной системе, выдает 128 значений, 6-7 значений которые присвоились (1101101 - например, те что мне нужны) и все остальные элементы массива тупо бессмысленные нули потому что значения им никакие не присваивались. Я понимаю, что можно ограничить массив размером до 7 элементов, а что если вывод результата получится больше 7 элементов? Число то в десятичной системе я могу ввести совершенно любое. Как сделать так, чтобы программа сама вычисляла сколько элементов было присвоено именно В ЭТОТ РАЗ и выдавала на экран только элементы которым были присвоены значения?

Последний раз редактировалось Stilet; 05.04.2015 в 16:52.
eragorn2013 вне форума Ответить с цитированием
Старый 05.04.2015, 18:26   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
#include <iostream>
#include <locale.h>

using namespace std;

int main()
{
    setlocale(LC_CTYPE,"Russian");

    cout<<"Введите положительное десятичное число: ";
    size_t number = 0;
    cin>>number;
    const size_t origin = number;

    char storage[128] = {};

    size_t len = 0;
    for(size_t i=0; i<128 && number!=0 ; ++i)    
        storage[i] = number%2,
        number/=2,
        ++len;

    cout<<"число "<< origin << " состоит из "<< len <<" битов: ";
    for(size_t i = 1; i != len+1; ++i) 
        cout<< static_cast<int>( storage[len - i] );
    cout<<std::endl;
    
}
_Bers вне форума Ответить с цитированием
Старый 05.04.2015, 18:50   #3
eragorn2013
 
Регистрация: 05.04.2015
Сообщений: 7
По умолчанию

Благодарю
eragorn2013 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое заполнение массива Delphi7 artem66rus Помощь студентам 3 30.01.2013 08:21
Автоматическое определение массива папок в bat файле d_adilet Помощь студентам 0 16.06.2012 17:24
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 15:14
Есть ли ограничение в 97-2010 версиях Excel ограничение на размер массива? clever77 Microsoft Office Excel 18 14.05.2011 23:50
ограничение даты Alexi Компоненты Delphi 4 21.04.2009 12:09


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840