« DJ TROOPERS | メイン | KURO-BOX/PRO »

2008年11月16日

sandglass

昨日は午後から事務所に行って、新人に教えるJavaの勉強会を見物してた。

for文とか配列を教えてたみたい。

うちが勉強会を見に行く目的は

・新人の♀の子を見に行く
・講師役の自分の先輩さんや後輩さんの教えっぷりを見に行く

この2つ。

教えに行ってるわけじゃないし、なんか聞かれても教えるのヘタだから困っちゃうんだけど、1個だけ質問をされてしまった。

聞かれたのは、for文を使った練習問題の解き方。「for文を使ってコンソールに図形を出力しなさい」っていうありがちな練習問題で、今回出力する図形は・・・

20081115.jpg

こんなの。中抜きの四角+バツ印+砂時計のように上下の三角を塗りつぶす、というめんどい形。

新人さんがやるにはちょっとムズイようなー?うちもどうやって実装するのがいいんだろう?って考えちゃったよね。で、帰ってからちょっと組んでみた。うちにはJavaの開発環境がないからCで書いちゃったし。

// 20081115.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
	int max = 10;
	int min = 1;
	int x;
	int y;
	char pen;
	const char black = '*';
	const char white = ' ';
	// 縦移動
	for (y = min; y <= max; y++) {
		// 横移動
		for (x = min; x <= max; x++) {
			// 最初と最後の行は全て塗る
			if (y == min || y == max) {
				pen = black;
			}
			// 右端と左端は必ず塗る
			else if (x == min || x == max) {
				pen = black;
			}
			// 斜線1(左上から右下へ)
			else if (x == y) {
				pen = black;
			}
			// 斜線2(右上から左下へ)
			else if (x == (max + 1) - y) {
				pen = black;
			}
			// 斜線1と2の間(上半分)
			else if (x > y && x < (max + 1) - y) {
				pen = black;
			}
			// 斜線1と2の間(下半分。※下半分は斜線2<斜線1になる)
			else if (x > (max + 1) - y && x < y) {
				pen = black;
			}
			// 他は空白
			else {
				pen = white;
			}
			// 1マス塗る
			printf("%c", pen);
		}
		// 行末には改行を忘れずに
		printf("\n");
	}
	// 正常終了
	return 0;
}

あんまイケてない気がするなぁ。右からx番目を表す(max + 1) - yとかはもっとスマートな書き方ができると思うんだけど、どうやって書くのがいいんかねぇ?

投稿者 txdrum : 2008年11月16日 02:05