平成28年 春期 基本情報技術者 午後 問09
問09 C言語次のCプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 〔プログラムの説明〕 図形の一部を拡大すると,再び同じパターンの図形が現れる自己相似性をもつ図形を, フラクタル図形と呼ぶ。関数 print_frac は,文字“*”及び空白文字を二次元の 格子状に並べてフラクタル図形を描画するプログラムである。 (1) 関数 print_frac が描画するフラクタル図形の例を,図1に示す。
図1 関数print_fracが描画するフラクタル図形の例 @ 深さが 0 の図形は,1行1列の文字“*”から成る図形である。 A 深さが 1 以上の図形は,深さが 0 の図形に対して,(2) で説明する生成規則を, 深さの回数だけ繰返し適用して得られる図形である。 (2) 深さが d(1以上)の図形は,深さが d−1 の図形を構成する一つ一つの文字を, 文字“*”であるか空白文字であるかに応じて,図2に示す生成規則のとおりに, 文字の行列で置換したものである。
図2 フラクタル図形の生成規則 @ 文字“*”の部分は,生成パターンと呼ぶ文字の行列で置換する。 A 空白文字の部分は,生成パターンと同じ大きさで全ての要素が空白文字の行列で置換する。 (3) 生成パターンは,二次元の配列変数 pat によって与える。pat の各要素の値は, 空白文字を表す 0,又は文字“*”を表す 1 である。pat の行数,列数及び内容を変更することで, 異なるフラクタル図形を描画することができる。 (4) 関数 print_frac の仕様は次のとおりである。 引数: d フラクタル図形の深さ
引数: i 行数(一番上の行を 0 行目とする) ここで,関数の引数に誤りはないものとする。 〔プログラム〕 #include <stdio.h> int pat[2][2] = { {1, 1 }, {1, Ø } }; int p_rn = sizeof pat / sizeof pat[Ø]; lnt p_cn = slzeof pat[Ø] / sizeof pat[Ø][Ø]; void print_frac(int); int exists_at(int, int, int); void print_frac(int d) { lnt i, j, rn, cn; rn = cn = 1; for (i = Ø; i < d; i++) { } for (i = Ø; i < rn; i++) { for (j = Ø; j < cn; j++) { putchar(exists_at(i, j, d) ? '*' : ' '); } putchar('\n'); } } int exists_at(int i, int j, int d) { if (d == Ø) { retrrn ; } else if (exists_at(i / p_rn, j / p_cn, d - 1) == Ø) { retrrn ; } else { retrrn ; } }
解答群
設問2 配列変数 pat を変更して,深さが3の図形を描画したところ, 次のとおりになった。配列変数 pat の変更内容として正しい答えを,解答群の中から選べ。
解答群
設問3 プログラム中の に入れる正しい答えを,解答群の中から選べ。 a に関する解答群
b 〜 d に関する解答群
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||||||||||||||||||||||||||||||||||||||||