■と空白を使って文字を表現する方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
質問です

■と空白を使って文字を表現する方法

#1

投稿記事 by 質問です » 16年前

C言語で画面に■と空白を使ってBの字を書くプログラムを作りたいのですが、どうしたらいいですか?
大きさは入力によって指定が出来るようにします

Dixq (管理人)

Re:質問です

#2

投稿記事 by Dixq (管理人) » 16年前

パッと考えられる方法は円と直線で表現する方法でしょうか。

コンソールに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などで指定出来るように変更すればよいと思います。

もしやりたいことが違ったらごめんなさい。

Dixq (管理人)

Re:質問です

#3

投稿記事 by Dixq (管理人) » 16年前

題名は適切なものに変更しておきました。

non

Re:質問です

#4

投稿記事 by non » 16年前

目的がよくわからないのですが、このような方法はいかがでしょうか?
ペイントで白黒のサイズを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;
}
実行結果はこのようになります。
            
 ■■■■■■■■   
 ■■■■■■■■   
 ■■■   ■■■  
 ■■■    ■■  
 ■■■    ■■  
 ■■■   ■■■  
 ■■■■■■■■   
 ■■■■■■■■   
 ■■■   ■■■  
 ■■■    ■■  
 ■■■    ■■  
 ■■■    ■■  
 ■■■   ■■■  
 ■■■■■■■■   
 ■■■■■■■    


倍率をいろいろと変えるのはサンプリングの場所を、計算するのが面倒だと思いますが・・・。

やそ

Re:質問です

#5

投稿記事 by やそ » 16年前

1110
1001
1001
1110
1001
1001
1110

とか書きたい文字をデータで保管しておき、
1=■
0=空白
とかで表示すればいいのでは?

lbfuvab

Re:質問です

#6

投稿記事 by lbfuvab » 16年前

独自フォーマットを作るのも手ですね。
(int型で高さ)(int型で横幅)(以下■は1,□は0の2進データで記録。余分は0で埋める)
みたいな感じで。

閉鎖

“C言語何でも質問掲示板” へ戻る