C言語で画面に■と空白を使ってBの字を書くプログラムを作りたいのですが、どうしたらいいですか?
大きさは入力によって指定が出来るようにします
■と空白を使って文字を表現する方法
Re:質問です
パッと考えられる方法は円と直線で表現する方法でしょうか。
コンソールにprintfでいいのですよね。
例えばDの字なら以下のように表現出来るのではないでしょうか。
コンソールにprintfでいいのですよね。
例えばDの字なら以下のように表現出来るのではないでしょうか。
#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などで指定出来るように変更すればよいと思います。 もしやりたいことが違ったらごめんなさい。
Re:質問です
目的がよくわからないのですが、このような方法はいかがでしょうか?
ペイントで白黒のサイズを160×160ピクセルにして、文字「B」を描き、保存します。
このビットマップファイルをバイナリで読み出し、適当にサンプリングして、■を書きます。
■■■■■■■■
■■■■■■■■
■■■ ■■■
■■■ ■■
■■■ ■■
■■■ ■■■
■■■■■■■■
■■■■■■■■
■■■ ■■■
■■■ ■■
■■■ ■■
■■■ ■■
■■■ ■■■
■■■■■■■■
■■■■■■■
倍率をいろいろと変えるのはサンプリングの場所を、計算するのが面倒だと思いますが・・・。
ペイントで白黒のサイズを160×160ピクセルにして、文字「B」を描き、保存します。
このビットマップファイルをバイナリで読み出し、適当にサンプリングして、■を書きます。
#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; }実行結果はこのようになります。
■■■■■■■■
■■■■■■■■
■■■ ■■■
■■■ ■■
■■■ ■■
■■■ ■■■
■■■■■■■■
■■■■■■■■
■■■ ■■■
■■■ ■■
■■■ ■■
■■■ ■■
■■■ ■■■
■■■■■■■■
■■■■■■■
倍率をいろいろと変えるのはサンプリングの場所を、計算するのが面倒だと思いますが・・・。