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

Перебор числа в 2ичной системе, используя boolean - C++

Восстановить пароль Регистрация
 
last13day
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 4
24.06.2013, 15:28     Перебор числа в 2ичной системе, используя boolean #1
Итак, изначально есть массив из boolean,
допустим 000000
Надо произвести перебор, как если бы это было число в 2ичной системе
вот так
000000
000001
000010
000011
000100
000101
....
101111
111111
Как осуществить данный перебор, не переводя наш массив в другие типы?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 15:28     Перебор числа в 2ичной системе, используя boolean
Посмотрите здесь:

C++ Напечатать в пятеричной системе исчисления числа от 0 до n
C++ Представление числа в k-ой системе счисления
Используя рекурсию, перемножить 2 натуральных числа не используя операции умножения и иметь логарифмическую сложность C++
C++ Определить все ли числа натурального числа N, представленного в 9ричной системе счислений являются одинаковыми
C++ Используя перебор значений найти все такие целые a, b, что n=3a+5b для любого натурального n>7
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VEINHORN
542 / 91 / 22
Регистрация: 16.12.2011
Сообщений: 317
24.06.2013, 15:45     Перебор числа в 2ичной системе, используя boolean #2
Что значит перебор? Вывести их так ввиде массива как двоичные числа по всему диапазону, т.е если число 00 то вывести 00 01 10 11 или что вы имеете ввиду?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.06.2013, 15:46     Перебор числа в 2ичной системе, используя boolean #3
C++
1
2
3
4
5
6
7
void increase(bool* array){
  while (*array){
    *array=0;
    array++;
  }
  *array=1;
}
last13day
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 4
25.06.2013, 16:44  [ТС]     Перебор числа в 2ичной системе, используя boolean #4
я предположила что надо составить условия по замене, но так не смогла пока что алгоритм придумать полностью

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>
#include <string>
#include <stdio.h>
 
using namespace std;
 
int main () {
 
bool b[11];
for (int i=0; i<11; i++) {
        b[i]=false;}
 
 
for (int z=0; z<11; z++) {
        cout << b[z];}
    cout << endl;
 
 
int n = 10;
 
if (b[n]==0) {b[n]=true;};
for (int z=0; z<11; z++) {
        cout << b[z];}
    cout << endl;
n--;
 
for (int i=0; i<11; i++) {
        b[i]=false;};
 
if (b[n]==0) {b[n]=true;};
for (int z=0; z<11; z++) {
        cout << b[z];}
    cout << endl;
}
Добавлено через 5 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
C++
1
2
3
4
5
6
7
void increase(bool* array){
  while (*array){
    *array=0;
    array++;
  }
  *array=1;
}
если объясните как эту функцию заставить работать буду благодарна.

Допустим объявляем наш массив и заполняем нулями
C++
1
2
3
4
bool b[11];
for (int i=0; i<11; i++) {
        b[i]=false;};
}
а далее как сделать чтобы работала она? я так понимаю вы используете указатели?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 17:02     Перебор числа в 2ичной системе, используя boolean #5
last13day, все намного проще. вводите разрядность n и все:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
 
void Print(int a, int n)
{
   for(int i = n - 1; i >= 0; --i)
      std::cout << ((a >> i) & 1);
   std::cout << std:: endl;         
}
 
int main()
{
   int n, i;
   std::cin >> n;
   for(i = 0; i < (1 << n); ++i)
      Print(i, n);
   return 0;        
}
хотите через массив, тоже просто, используйте рекурсию:
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
#include<iostream>
const int N = 5;
 
void Print(int *a, int n)
{
   for(int i = 0; i < n; ++i)
      std::cout << a[i];
   std::cout << std:: endl;         
}
 
void Generate(int *a, int i, int n)
{
   if (i == n)
      Print(a, n);
   else
   {
      a[i] = 0;
      Generate(a, i + 1, n);
      a[i] = 1;
      Generate(a, i + 1, n);
   }
}
 
int main()
{
   int b[N];
   Generate(b, 0, N);
   return 0;        
}
Yandex
Объявления
25.06.2013, 17:02     Перебор числа в 2ичной системе, используя boolean
Ответ Создать тему
Опции темы

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