Dynamic programming bits

Pages: 12
Jan 26, 2013 at 11:22am
Hello.
I am coding a dynamic solution to a problem with buttons.
a button can be on or off. there are n buttons
so i thought of trying all possibilities of bits(1 or 0) of length n
for example for n=3
000
001
010
011
100
110
111
do you have any idea how i can iterate through all these for any n?
Thanks
Jan 26, 2013 at 11:25am
what is the problem description?
Jan 26, 2013 at 11:35am
its not just about this problem. i actually get this idea on many problems. but i never knew how to do it so i did something else. this is just an example.
Jan 26, 2013 at 2:46pm
well in that case, i think that could be a solution.
Jan 26, 2013 at 3:33pm
which? ;p i am asking for help on how to implement this
Last edited on Jan 26, 2013 at 3:33pm
Jan 26, 2013 at 3:41pm
In case than you need an integer that represent what buttons are down and what are up, you can compute the number:
int i = a[0]*1 + a[1]*2 + a[2]*4 + a[3]*8 +...
This number is unique for every image of up-down buttons
Jan 26, 2013 at 3:48pm
the problem is to get the array a ;p i did what you said but it's impractical so i asked here to see if there is anything easier(with bitsets for example)
Jan 26, 2013 at 4:08pm
If we understand the same problem, a[j] have values 0-->>down or 1-->>up
Jan 26, 2013 at 4:31pm
think of it as having a n-bit binary number,

interate through each number from 0 to (2^n)-1, and at each iteration use the bit shift operator << and then AND that bit with 1 to print out whether or not a 1 or 0 is in that location.

in this manner you can have someone input a value for n and it will give you all the possible iterations. Though you can clearly see youll have 2^n iterations no matter what n you give
Last edited on Jan 26, 2013 at 4:50pm
Jan 26, 2013 at 4:49pm
here, was fun
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
#include <iostream>
#include <math.h>

void printBinary(const unsigned char val, int n) {
  for(int i = n-1; i >= 0; i--)
    if(val & (1 << i))
      std::cout << "1";
    else
      std::cout << "0";
}

int main() {
  while(true){
    unsigned int getN;
    unsigned char a;
    std::cout<<"Please enter N number of buttons"<<std::endl;
    std::cin>>getN;
    int n = (int)pow(2, getN); 
  
    for(int i = 0; i < n; i++){
      a = i;
      std::cout<<i<<": ";
      printBinary(a, getN);
      std::cout<<std::endl;
    }     
  }
}


though note: this only works up to n 8.. due to the fact that char only holds 8 bits.. but, im sure you can figure out a way to work beyond this ;)
Last edited on Jan 26, 2013 at 4:52pm
Jan 26, 2013 at 5:27pm
closed account (zb0S216C)
gtm wrote:
"due to the fact that char only holds 8 bits.."

No. A byte can have any amount of bits so long as the byte can represent the value 255.

Wazzak
Last edited on Jan 26, 2013 at 5:42pm
Jan 26, 2013 at 5:38pm
What.

1 byte = 8 bits

Jan 26, 2013 at 5:41pm
closed account (zb0S216C)
That's an assumption, not a fact. Not every system has an 8-bit byte.

Wazzak
Jan 26, 2013 at 5:44pm
bits: 10110011 = 8 bits = 179
Jan 26, 2013 at 5:44pm
Now I realize I am a newb here and to C++ and all but I have to respectfully disagree with you.

A byte is always 8 bits.

What changes system per system is how many bits represent certain types such as a char, integer, or float for instance.
Jan 26, 2013 at 5:48pm
Is 8 bits that can represent numbers form 0 to 255 with all posible compinations. Like 0-999 in normal numbers basis 10 represents 1,000 numbers with 3 decimal "bits"
Jan 26, 2013 at 5:53pm
Jan 26, 2013 at 5:57pm
closed account (zb0S216C)
gtm wrote:
"I realize I am a newb here and to C++"

That's why you're not understanding me. The C++ Standard formally states that the amount of bits "char" must represent is 8 at minimum (28). Therefore, any number of bits per byte is to be assumed. While 8 is usually the normal amount of bits that form a byte, this cannot be assumed as in some cases, this is purely implementation specific.

Wazzak
Jan 26, 2013 at 6:01pm
All that means is that a "char" is a minimum of 8 bits. This does not mean that any number of bits to a byte can be assumed.. it still holds true that 8 bits is a byte.. youre getting confused.. a char is not explicitly a byte, nor vice versa. So on one system say a char is made up of 12 bits. This does NOT mean that there are 12 bits to a byte.
Jan 26, 2013 at 6:17pm
All that means is that a "char" is a minimum of 8 bits.


standard wrote:
1.7 The C++ memory model [intro.memory]
The fundamental storage unit in the C++ memory model is the byte. A byte is at least large enough to contain any member of the basic execution character set (2.3) and the eight-bit code units of the Unicode UTF-8 encoding form and is composed of a contiguous sequence of bits, the number of which is implementation defined.


Clearly, a byte is not restricted to an octet.
Pages: 12