以下のように表示するプログラムを作成しましょう.
( 1, 1) ( 1, 2) ( 1, 3) ( 1, 4) ( 1, 5) ( 1, 6) ( 1, 7) ( 1, 8) ( 1, 9) ( 1,10) ( 2, 1) ( 2, 2) ( 2, 3) ( 2, 4) ( 2, 5) ( 2, 6) ( 2, 7) ( 2, 8) ( 2, 9) ( 2,10) ( 3, 1) ( 3, 2) ( 3, 3) ( 3, 4) ( 3, 5) ( 3, 6) ( 3, 7) ( 3, 8) ( 3, 9) ( 3,10) ( 4, 1) ( 4, 2) ( 4, 3) ( 4, 4) ( 4, 5) ( 4, 6) ( 4, 7) ( 4, 8) ( 4, 9) ( 4,10) ( 5, 1) ( 5, 2) ( 5, 3) ( 5, 4) ( 5, 5) ( 5, 6) ( 5, 7) ( 5, 8) ( 5, 9) ( 5,10) ( 6, 1) ( 6, 2) ( 6, 3) ( 6, 4) ( 6, 5) ( 6, 6) ( 6, 7) ( 6, 8) ( 6, 9) ( 6,10) ( 7, 1) ( 7, 2) ( 7, 3) ( 7, 4) ( 7, 5) ( 7, 6) ( 7, 7) ( 7, 8) ( 7, 9) ( 7,10) ( 8, 1) ( 8, 2) ( 8, 3) ( 8, 4) ( 8, 5) ( 8, 6) ( 8, 7) ( 8, 8) ( 8, 9) ( 8,10) ( 9, 1) ( 9, 2) ( 9, 3) ( 9, 4) ( 9, 5) ( 9, 6) ( 9, 7) ( 9, 8) ( 9, 9) ( 9,10) (10, 1) (10, 2) (10, 3) (10, 4) (10, 5) (10, 6) (10, 7) (10, 8) (10, 9) (10,10) |
以下のように表示するように変えましょう.
( 1, 1) ( 2, 1) ( 2, 2) ( 3, 1) ( 3, 2) ( 3, 3) ( 4, 1) ( 4, 2) ( 4, 3) ( 4, 4) ( 5, 1) ( 5, 2) ( 5, 3) ( 5, 4) ( 5, 5) ( 6, 1) ( 6, 2) ( 6, 3) ( 6, 4) ( 6, 5) ( 6, 6) ( 7, 1) ( 7, 2) ( 7, 3) ( 7, 4) ( 7, 5) ( 7, 6) ( 7, 7) ( 8, 1) ( 8, 2) ( 8, 3) ( 8, 4) ( 8, 5) ( 8, 6) ( 8, 7) ( 8, 8) ( 9, 1) ( 9, 2) ( 9, 3) ( 9, 4) ( 9, 5) ( 9, 6) ( 9, 7) ( 9, 8) ( 9, 9) (10, 1) (10, 2) (10, 3) (10, 4) (10, 5) (10, 6) (10, 7) (10, 8) (10, 9) (10,10) |
内側の for 文の式2がポイントです.
これではいかがでしょう?
( 1, 1) ( 1, 2) ( 1, 3) ( 1, 4) ( 1, 5) ( 1, 6) ( 1, 7) ( 1, 8) ( 1, 9) ( 1,10) ( 2, 2) ( 2, 3) ( 2, 4) ( 2, 5) ( 2, 6) ( 2, 7) ( 2, 8) ( 2, 9) ( 2,10) ( 3, 3) ( 3, 4) ( 3, 5) ( 3, 6) ( 3, 7) ( 3, 8) ( 3, 9) ( 3,10) ( 4, 4) ( 4, 5) ( 4, 6) ( 4, 7) ( 4, 8) ( 4, 9) ( 4,10) ( 5, 5) ( 5, 6) ( 5, 7) ( 5, 8) ( 5, 9) ( 5,10) ( 6, 6) ( 6, 7) ( 6, 8) ( 6, 9) ( 6,10) ( 7, 7) ( 7, 8) ( 7, 9) ( 7,10) ( 8, 8) ( 8, 9) ( 8,10) ( 9, 9) ( 9,10) (10,10) |
内側の for 文が2つになります.
ちょっと高度になりますが,三角関数を画面上に表示させてみましょう.
C言語に用意されている三角関数である sin() と cos() を使いますが,このときにはヘッダファイルとしてp.94の6.7節にあるように math.h をインクルードしなければいけません.
また,コンパイル時にオプションも必要です.
$ cc -lm hoge.c
のように,math関数にlinkさせるオプションの lm を付けましょう.
double 型の実数を利用しておよそ一周期分 sin と cos を同時に表示させてみましょう.三角関数の引数は単位がラジアンなので,0から6.3くらいまでの範囲で描かせるときれいです.
O X O X O X X O X O X O X O X O X O X O X O X O X O XO O X O X O X O X O X O X O X O X |
上の例は角度を0から6.5radまで0.3rad刻みでプロットしています.行単位での表示しかできませんので,ちょっとおおざっぱですが,それでも三角関数には見えるでしょう.
3重の for 文を使用して,以下のような表示を行なうプログラムを作 成しましょう.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
一番外側の for で3角形を何個描くかを決めます.図では10個の三角形があるので,10回繰り返すことになります.次の for 文で各三角形の形に関して,何行描くかを決めます.これは毎回違っていますので,その規則性を探します.最後に,一番内側の for 文で各行に何個星を描くかを制御します.これも行によって異なりますので,その規則性を探します.
12月になりましたので,以下のようにクリスマスツリーっぽい絵を描いてみましょう.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * III III III |
左から,まずスペースの処理,左側の三角部分,中央のアスタリスク,右の三角部分というように各行で4つの処理に分けています.また,下の木の幹の部分は別処理で描画しています.
前問と同じように,木の枝のブロックを何個描くか,ブロックには何行あるか,各行にはスペースや星が何個あるか,と,順番に考えます.