ページ 11

シフト演算についての質問です。

Posted: 2009年7月15日(水) 19:24
by アヤ
シフト演算を用いて「□」と「■」を以下のように表示せよという問題が出たのですが
分からなくて困っています。

どなたかお知恵を貸していただけないでしょうか?

□□□□□□□□■
□□□□□□□■
□□□□□□■
□□□□□■
□□□□■
□□□■
□□■
□■

□■
□□■
□□□■
□□□□■
□□□□□■
□□□□□□■
□□□□□□□■
□□□□□□□□■

Re:シフト演算についての質問です。

Posted: 2009年7月15日(水) 20:15
by conio
シフト演算を、どう描画と結びつけるのかが不明なのですが
とりあえず こんな感じでどうでしょう?

※Shiftという関数は、指定した数だけ"□"を表示する関数です。
(ただし、一番右端が"■"になる)

あと、このプログラムには色々と修正の余地があるので、考えてみると良いと思います。

-----------------------------------------------------------------
#include <stdio.h>

void Shift(int num)
{
	int i = 0;
	
	if(num > 0){
		i = 1 << (num - 1);

		while(i){
			if(i & 1)
				printf("■");
			else
				printf("□");

			i >>= 1;
		}
	}
	puts(" ");
}


int main(void)
{
	Shift(9);
	Shift(8);
	Shift(7);
	Shift(6);
	Shift(5);
	Shift(4);
	Shift(3);
	Shift(2);
	Shift(1);
	Shift(2);
	Shift(3);
	Shift(4);
	Shift(5);
	Shift(6);
	Shift(7);
	Shift(8);
	Shift(9);

	return 0;
}
-----------------------------------------------------------------

Re:シフト演算についての質問です。

Posted: 2009年7月17日(金) 09:54
by LUNA
へぇ・・・シフト演算子ってこうやって使うんだなぁ~・・・
後、mainの中ループ使ってサクッとしたプログラムにできそうね。