前提・実現したいこと
任意の桁数の2進数の全通りを配列に格納してそれを出力するようなプログラムを作りたいです.
例えば,2桁であれば
[1,1]
[0,1]
[1,0]
[1,1]
三桁であれば
[1,1,1]
[0,1,1]
[1,0,1]
[0,0,1]
[1,1,0]
[0,1,0]
[1,0,0]
[0,0,0]
というふうに格納・出力をしたいですが,以下のような出力になってしまいます.
どこがおかしいのか,どなたか教えてください...
発生している問題・エラーメッセージ
3桁の時について,
出力すると
0 0 1
1 0 0
0 0 32563
0 32765 0
32765 0 0
1664188935 3 -1
というように,代入がうまくできていないようです...
エラーメッセージ
該当のソースコード
#include<stdio.h>
int pow_2(int digit); /2の引数乗を戻す/
void make_binary(int len1,int len2, int n, int (*a)[n]); /len1(=len2)×nの二次元配列に0または1を代入し,n桁?の全ての2進数を作成/
int main(void){
int i,j;
int digit,len;
digit=3;
len=pow_2(digit);
int a[len][digit]; /ここでは,3桁の二進数(先頭が0でも良い)が8通り存在するので8×3の配列を用意/
make_binary(len, len, digit-1,a);
for(i=0; i<len; i++)『 for(j=0; j<digit; j++){ printf("%d ",a[i][j]); } printf("\n"); } return 0;
}
int pow_2(int digit){
int i;
int a=1;
for(i=0; i<digit; i++){
a=a*2;
}
return a;
}
void make_binary(int len1,int len2, int n, int (*a)[n]){
int i,j;
i=0;
if (n==-1){
return ;
}
else{
while(i<len1){
for(j=0; j<len2/2; j++){
printf("%d %d ",i,j);
printf("\n");
a[i++][n]=1;
}
for(j=len2/2; j<len2; j++){
printf("%d %d ",i,j);
printf("\n");
a[i++][n]=0;
}
}
make_binary(len1, len2/2, n-1, a);
}
}
C言語 ソースコード
試したこと
make_binary()関数内のi,jを出力したところ,
(i,j)=
(0 0) (1 1) (2 2) (3 3) (4 4) (5 5) (6 6) (7 7)
(0 0) (1 1) (2 2) (3 3) (4 0) (5 1) (6 2) (7 3)
(0 0) (1 1) (2 0) (3 1) (4 0) (5 1) (6 0) (7 1)
となり,i,jは期待していた通りにfor文,while文を回っていることはわかりました.
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/13 01:28