■と空白を使って文字を表現する方法
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;
}
実行結果はこのようになります。