プログラミングの課題です。
プログラミングの課題です。
9個のマスがあり、1~9の数字が一個だけ入るとする。
このとき、符号なし整数1つでマスにまだ入れられていない数字を記録したい。
そこで、下位ビットから9ビット目までで1~9がマスに入っているかどうかを表すこととする。
空白のマスは0で表示する。
例:132584090→下位9ビット:001100000
この場合、6もしくは7がマスに入っていないため、6ビット目と7ビット目に1が立っていることとなる。
課題プログラムを実行すると、in.txtから9個の文字データを読み込み、上記のような変換をして9ビットのデータのビット列を表示する。例えば132584090とin.txtに記録されていた場合、下位9ビットは001100000と表示される。
手順
1..ビット列を記録する変数を宣言し、0で初期化する。
2..9個の数字を9個の変数に ファイルから読み込む
3..各変数には0~9の数字が入っているが、0以外の場合に対応する桁に1を立てる
4..ビット列の 0と1を反転させる
5..下位9ビットをprintf関数で表示する
6..in.txtの値をいろいろ変化させて、プログラムが正しいことを確認せよ。
#include <stdio.h>
int main()
{
int i,a[10],b;
FILE *fp;
fp=fopen("in.txt","r");
if(fp==NULL){
printf("ファイルが開けませんでした\n");
}
while(fscanf(fp,"%d %d %d %d %d %d %d %d %d",a[i],a[i],a[i],a[i],a[i],a[i],a[i],a[i],a[i]))i++;
for(i=0;i<9;i++){
a[i]='\0';
}
for(i=0;i<9;i++){
a[i]=b;
}
b=~b;
printf("下位9ビット",(b%256)&8,(b%128)&7,(b%64)&6,(b%32)&5,(b%16)&4,(b%8)&3,(b%4)&2,(b%2)&1,b%1);
return(0);
}
こんな感じで作りましたが、実行できませんでした。できれば詳しく解説していただけるとたすかります。よろしくお願いします。