5×5の1と0によってランダムで作られたテキストファイルが3つあるとします。
その3つを比較してまた新しい 5×5を作りたいです。
3つの一つずつの場所の値全てかけて新たな値を作ります。
例えば3×3ですると、
100 101 111
111 101 111
010 101 111
3つを比較して
100
101
000
となるようなコードを作りたいです。
コードを書くことが苦手なのでアドバイスをいただけないかと思っています。
よろしくお願いいたします。
追記
fgetc関数を使ってみたのですが
最後の3つのテキストを1つのマスでかけて表示させる時に、ちゃんと1か0の数字が表示されません。
fgetcをintに変換する方法を教えてください
(atoi関数を使ってみてもダメでした)
c言語
1#include <stdio.h> 2#include <stdlib.h> 3 4int main(void) { 5 FILE *fp; // FILE型構造体 6 static char fname1[] = "red.txt"; 7 static char fname2[]="green.txt"; 8 static char fname3[]="blue.txt"; 9 char str[16]; 10 int f1, f2, f3, f4, f5; 11 int l[25]; 12 int m[25]; 13 int n[25]; 14 int i,a,b,seki; 15 16 17 18 fp = fopen(fname1, "r"); // ファイルを開く。失敗するとNULLを返す。 19 if(fp == NULL) { 20 printf("%s file not open!\n", fname1); 21 return -1; 22 } 23 24 while((l[i]=fgetc(fp)) != EOF) { 25 i++; 26 27 } 28 printf("\n"); 29 fclose(fp); // ファイルを閉じる 30 31 32 33 34 fp = fopen(fname2, "r"); // ファイルを開く。失敗するとNULLを返す。 35 if(fp == NULL) { 36 printf("%s file not open!\n", fname2); 37 return -1; 38 } 39 i=0; 40while((m[i]=fgetc(fp)) != EOF) { 41 42i++; 43 44 } 45 printf("\n"); 46 fclose(fp); // ファイルを閉じる 47 48 49 50 51 52 fp = fopen(fname3, "r"); // ファイルを開く。失敗するとNULLを返す。 53 if(fp == NULL) { 54 printf("%s file not open!\n", fname3); 55 return -1; 56 } 57 i=0; 58 while((n[i]=fgetc(fp)) != EOF) { 59 60 61 i++; 62 63 } 64 printf("\n"); 65 66 67 fclose(fp); // ファイルを閉じる 68 69 70 71 72 i=0; 73 74 for(a=0;a<5;a++){ 75 76 for(b=0;b<5;b++){ 77 78 seki=l[i]*m[i]*n[i]; 79 printf("%c ",seki); 80 81// printf("%c ",l[i]); 試しにl[i]を表示させてみてもダメ 82 83 i++; 84 } 85 printf("\n"); 86 } 87 88 89 90 return 0; 91} 92 93 94 95
質問には「比較する」と書かれていますが、行われているのはビットの積演算(AND)のように思われます。
そうなのであれば、ファイルから読み込んだ"01011"というような文字列を2進数、0b01011、に変換し、あとはビット演算で処理するのが素直なのではないでしょうか。
回答5件
あなたの回答
tips
プレビュー