このプログラムの頭のところだけ見てみましょう.
if (n <= p+31) {m=1; d=n-p;} else {p=p+31; if (n <= p+28) {m=2; d=n-p;} else {p=p+28; if (n <= p+31) {m=3; d=n-p;} else {p=p+31; ... ...
月の値(m)は規則正しく1ずつ増加していますが,月の日数はそうではありません.
いま仮に,12個の変数,あるいは定数c1, c2, c3, ..., c12があって,c1には1月の日数(31)が,c2には2月の日数(28)が,c3には3月の日数(31)が,というぐあいに,ckにはk月の日数が入っているものとしましょう.そうすれば上に示した部分は
if (n <= p+c1) {m=1; d=n-p;} else {p=p+c1; if (n <= p+c2) {m=2; d=n-p;} else {p=p+c2; if (n <= p+c3) {m=3; d=n-p;} else {p=p+c3; ... ...
となり,大分スマートになってきました.しかしまた,12行書く必要があり,forやwhileによる繰返しの格好には書けません.どうしてそうなのか,考えてみましょう.
26.1.6.2 数を減らす | 26.1.6.3 規則性を | 26.1.6.4 添字 | ||
2009年度版に向けて現在作業中です.
このページに関してお気づきの点がありましたら
コメント投稿システムまでお願いします.
|
Wed, 28 Apr 2004 18:44:16 JST (1920d) |