• 締切済み

二次元配列のプログラミングが分かりません

センサからは常に「#(ONかOFFが16)CR」全部で18個の情報が送られてきます。ONは1、OFFは0を返します。 この情報20回分を二次元配列に格納し、排他的論理和を取るプログラムを考えています。 *************************************** 例3回の場合 1回目#1101110000000111CR 2回目#0010110101110100CR 3回目#0110010100010101CR これを縦に排他的論理和を取っていきます。 まず1回目と2回目の排他的論理和をとる 次に2回目と3回目の排他的論理和をとる 最後に全部で1がいくつあったのかを表示 **************************************** このようなプログラムを書きたいです。どのように書いたらいいでしょうか。 <今できているプログラムは以下です> int main(void) { int i=1; int a=0; int A[20][18]; int b,c =0; char* Buffer; FILE *fp1; Buffer = (char*)calloc(1024,sizeof(char)); char port1[10]; sprintf(port1,"COM6"); fp1 = fopen("result.txt","w"); // ファイルを開く /*ポート設定省略*/ /* 配列の初期化*/ for(b=0;b<20;b++){ for(c=0;c<18;c++){ A[b][c]=0; fprintf(fp0,"%2d",A[b][c]); } } fclose(fp0); /********************************* 数を合わせる #が入ったら読み込み残りの17を拾う *********************************/ do{ CommPort1->ReadBytes((unsigned char*)Buffer,1); }while(*Buffer !='#'); CommPort1->ReadBytes((unsigned char*)Buffer+1,17); //残りの17byteを読み込む CommPort1->FlushCommPort(); //データの送受信 for(int i=0;i<20;i++){ //20回分のデータを読みこみ、テキスト出力 tuushin(Buffer); n++; fprintf(fp1,"%d=%s \n",n,Buffer); } fclose(fp1); return 0; } /**************************************************** 通信する関数 「#(ONかOFFが16個)endコード」、計18からなる文字列を読み込み表示 ****************************************************/ void tuushin(char*Buffer) { CommPort1->ReadBytes((unsigned char*)Buffer,18); CommPort1->FlushCommPort(); printf("%s\n",Buffer); } どのようにかけばいいのか分からないので、教えてください。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「18の文字列が格納されています」の意味は不明. 「長さ 18 の文字列」とも, 「18個の文字列 (長さは知らない)」とも解釈できます. どっち? いずれにしても, C には「文字列」というものは存在しない (文字の配列でしかない) ということはご存じでしょうか. あと, この場面では (標準的でない) atoi ではなく strtoul あたりを使ってあげるといいかもしれない.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

えぇと, 「配列 a[] に入っている n個のデータ a[0], a[1], ..., a[n-1] の総和を計算する」ことはできますか?

ch1ara
質問者

補足

できます! いま、分からないところがどこなのか悩んでいたのですが、Bufferには、18の文字列が格納されています。その文字列を配列にいれるときに、1文字ずついれる方法がわかりません。 また、ASCIIコードなので、atoi関数を使わなければいけないと思うのですがその方法も調べたのですがよく分かりませんでした。

回答No.1

どのように書けば良いか分からないというのは、 答えを全部教えてくれってこと?? >まず1回目と2回目の排他的論理和をとる >次に2回目と3回目の排他的論理和をとる 1回目と2回目のXORの結果と3回目をXORじゃないの? そうだとすれば、 データ1回分のバッファを確保して、 1回目のデータと2回目のデータのXOR結果を、 バッファに格納、 バッファに格納された結果と、3回目のデータをXOR ・・・ これを20回目まで繰り返せばいいのでは? >二次元配列のプログラミングが分かりません とあまりすが、 配列を使ったプログラムの仕方がわからないの? それなら、C言語のサイトでも見れば分かりやすく載っていると思いますが…。 なんにせよ、もうすこし具体的にわからない部分を教えて下さい。

ch1ara
質問者

補足

sonata1229さん> 答えを全部とはいいませんがサンプルプログラムみないなものを教えてもらえたらそれを元に考えたいなと思い投稿しました C言語のサイトも、本もよく読みました sonata1229さんの言ってることも理解は出来るのですが、プログラムに書きおこすことができなくて困っています もぅ本当にどこから手をつけたらいいかわからなくて、こんな状態なのに投稿してごめんなさい。

関連するQ&A