■と空白を使って文字を表現する方法
Posted: 2008年11月13日(木) 13:45
C言語で画面に■と空白を使ってBの字を書くプログラムを作りたいのですが、どうしたらいいですか?
大きさは入力によって指定が出来るようにします
大きさは入力によって指定が出来るようにします
#include <stdio.h> #define XMAX 15 #define XMIN 0 #define YMAX 15 #define YMIN -15 int req(int x, int y){ if( x*x + y*y <= YMAX*YMAX && x*x + y*y > (YMAX-2)*(YMAX-2) ){ return 1; } if( x == 0 || x == 1 ){ return 1; } return 0; } int main(void){ int x, y; for( y=YMAX ; y>=YMIN ; y-- ){ for( x=XMIN ; x<=XMAX ; x++ ){ if ( req( x , y ) == 1 ){ printf( "■" ); } else { printf( " " ); } } printf( "\n" ); } } 実行結果 ■■ ■■■■■■ ■■■■■■■■ ■■ ■■■■ ■■ ■■■■ ■■ ■■■ ■■ ■■■ ■■ ■■ ■■ ■■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■ ■■■ ■■ ■■ ■■ ■■■ ■■ ■■■ ■■ ■■■■ ■■ ■■■■ ■■■■■■■■ ■■■■■■ ■■ 少し大きい円の方程式より内側であり、少し小さい円の方程式の外側であれば■ xが0か1ならば■ それ以外なら空白を出力するとこうなります。 方程式の上、下を使えば斜めも表現出来ると思います。 例えば×を書くプログラムは #include <stdio.h> #define XMAX 10 #define XMIN -10 #define YMAX 10 #define YMIN -10 int req(int x, int y){ if( y >= -x-1 && y <= -x+1 ){ return 1; } if( y >= x-1 && y <= x+1 ){ return 1; } return 0; } int main(void){ int x, y; for( y=YMAX ; y>=YMIN ; y-- ){ for( x=XMIN ; x<=XMAX ; x++ ){ if ( req( x , y ) == 1 ){ printf( "■" ); } else { printf( " " ); } } printf( "\n" ); } } 実行結果 ■■ ■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■■■ ■■■ ■■■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■ ■■ このようにかけると思います。 Bを書くときは、円の中心をずらして、2つ用意し、Dを拡張すると出来ると思います。 変更する箇所はreq内の判定式だけで大丈夫です。 完成したら、大きさをscanfなどで指定出来るように変更すればよいと思います。 もしやりたいことが違ったらごめんなさい。
#include <stdio.h> int main(void) { FILE *fp; unsigned char data[160*160/8]; size_t size; int i,j; fp = fopen( "B.bmp", "rb" ); if( fp == NULL ) { puts( "File Open ERROR" ); return 1; } fseek(fp, 0x3e, SEEK_SET); size = fread( data, 1, 160*160/8, fp ); if( size != 160*160/8){ puts("File Read ERROR"); return 1; } fclose( fp ); for(i=0;i<20;i++){ for(j=0;j<20;j++){ if(data[20*(19-i)*8+j]>0x7f) printf(" "); else printf("■"); } printf("\n"); } return 0; }実行結果はこのようになります。