基本情報 平成28年春 C言語
十六夜の月というビールを飲んでいた。
風雅な名前にたがわず、とても美味しい。
ほろ酔いで、この問題を解いていた。
基本情報技術者過去問題 平成28年春期 午後問9|基本情報技術者試験.com
ジュリア集合とか高木関数とか、興味深いフラクタル図形を、ちょっと書いてみましょう、という問題。
もちろん、ジュリア集合とかを書くわけではなく、パターンを与えて、深さdの図形を描くだけである(ほんとうのフラクタルとは、コッホ曲線のように、d→∞としたものである)。
とりあえず問題には正解した。
でもソースコードに不満がある。
お世辞にもわかりやすいコード、安全なコードとは言えない(と思う)。
なので、書き直していた。
コンパイルは通るけど、なぜか止まる。
なぜだ。
今日はもう疲れた(酔ってるだけだが)ので、明日考えることにする。
ちなみに書き直したコードは、以下の通り。
何か気づいた人がいたら教えてください。
#include <stdio.h> #define P_RN 2 #define P_CN 2 const int pat[P_RN][P_CN] = { {1, 1}, {1, 0} }; void print_frac(int); int exists_at(int, int, int); int main() { int d; printf("深さ? : "); scanf("%d", d); print_frac(d); return 0; } void print_frac(int d) { int i, j, rn, cn; rn = cn = 1; for(i=0; i<d; i++){ rn *=P_RN; cn *=P_CN; } for(i=0; i<rn; i++){ for(j=0; j<cn; j++){ putchar(exists_at(i, j, d)? '*' : ' '); } putchar('\n'); } } int exists_at(int i, int j, int d) { if(d==0) { return 1; } else if(d==1) { return pat[i][j]; } else { return exists_at(i/P_RN, j/P_CN, d-1); } }