Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2010, 18:35   #1
R100500B
Новичок
Джуниор
 
Регистрация: 29.05.2010
Сообщений: 2
По умолчанию Создание наборов в двоичном счистлении

Всем доброго времени суток. В рамкам моей задачи возникла следующая подзадача. Имеется некоторое число тип int. Это число обозначает количество переменных. Так вот необходимо построить 2^3 двоичных наборов для этих переменных. К примеру: дается число 3, следовательно должно быть построено 8 наборов
000
001
010
011
100
101
110
111
Данные наборы нужно записать в матрицу. Т.е. создать матрицу, размерности 3x8 и поэлементно записать все наборы.
Я, как не слишком опытный пользователь, вижу два способа реализовать подобное:
1) Создать матрицу, а затем каким-то образом (реализовать который на данный момент пытаюсь), сразу попытаться заполнить ее наборами..имея только число переменных и количество наборов.
2) Имея количество наборов (к примеру 8) в принципе, можно разложить их на 8 десятичных чисел. Затем перевести каждое в двоичную систему счисления, а вот потом, каким-то образом попытаться перевести эти наборы в матрицу.
Хотелось бы посоветоваться, какой из способов на ваш взгляд является наиболее рациональным, а если есть более рациональные этим, с удовольствием выслушаю их.
Буду рад любой помощи от конкретной реализации, до советов по задачи в целом.
Контакты:
Skype: R100500B
ICQ: 243402199

Последний раз редактировалось R100500B; 29.05.2010 в 18:41.
R100500B вне форума Ответить с цитированием
Старый 29.05.2010, 19:51   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Смотрим на данный набор:
Цитата:
Сообщение от R100500B Посмотреть сообщение
000
001
010
011
100
101
110
111
и видим:
1. Первая строка всегда будет состоять из нулей, а последняя - из единиц;
2. В последнем столбце (назовем его нулевым, т.к. биты нумеруются справа налево) (2^0 = 1) происходит чередование 0 и 1;
3. В первом столбце (2^1 = 2) уже идёт последовательность 2 ноля, 2 единицы, 2 ноля,...;
4. Во втором столбце (2^2 = 4): 4 ноля, 4 единицы,...
5. ...
Код:
bool a[N][M]; // N - число столбцов, M - число строк (M = 2^N)
bool current;
for (int i = 0; i < N; ++i) // Перебираем столбцы справа-налево
{
  current = false;
  for (int j = 0; j < M; ) // Перебираем строки
  {
    for (int k = 0; k < pow(2,i); ++k, ++j) // Заполняем одинаковую последовательность чисел из 2^i элементов (см. пункты 2-5 из описания)
      a[N-i-1][j] = current;
    current = !current;
  }
}
Писал здесь, потому мог где-то что-то напутать, но идея, надеюсь, понятна.
pu4koff вне форума Ответить с цитированием
Старый 29.05.2010, 22:13   #3
R100500B
Новичок
Джуниор
 
Регистрация: 29.05.2010
Сообщений: 2
По умолчанию

2 pu4koff, большое спасибо)) это было то, что нужно) все работает)
R100500B вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли в тексте слова, состоящие из разных наборов букв? leha3005 Помощь студентам 0 24.12.2009 23:41
Число в двоичном виде в C apple_pie Общие вопросы C/C++ 0 07.12.2009 11:54
Хранение текста в двоичном файле Nitrino Общие вопросы C/C++ 63 04.06.2009 02:46
Текущий проводник не поддерживает возврат нескольких наборов записей Crasty Помощь студентам 1 17.05.2009 16:35
Вывод байта в двоичном пердставлении (С++) trollik Помощь студентам 6 01.09.2008 23:55