松下昇への接近

 旧 湾曲していく日常

散歩としてのプログラミング

 えーと、この問題は、数学的には5040通りについて考えなければならない問題ではなく、 7!÷(4!×3!)=35 の場合について考えればよいだけの問題です。何日か目には私も気づきましたが。
 問題を数学的に考えるという課題は後回しにして、昨日はC言語で、答(3168 288 1584)を出すという課題をやろうとしたら、C言語をまったく忘れていて(というかもともとほとんどわかっていない)まる1日もかかってしまった。
えーと:☆ つまずいたところの一つはpower(累乗)
basicのくせで、「2^(j)」でいけると思っていた。
累乗は、math.hでは powerではなくpow のようだ。そして以下に注意。
#重要math.hを使うときは,リンクオプションが必要.具体的には,
コンパイルするときに「gcc *.c –lm 」と書く(はいふん・える・えむ)
☆  恥ずかしい話ですが、1文字めと3文字目を足すとき、str[j]とかを整数化つまりatoiしなきゃいけない。ところがそれがいくらやってもエラーが出る。警告: passing argument 1 of ‘atoi’ makes pointer from integer without a cast   %1 の初期化はキャストせずに整数型の変数をポインタに代入しています
今日わかったのは、atoiというのは文字列を数字に変換する関数であり、2とか3とかいう数を数字に変えるには単純に「48を引けば良い」ということでした。昨日からそうしていたのですが、なぜそれで良いのかの理屈がよくわかっていなかった。
☆ 最後に出来たと思って数えたら、何と(3168 288 1584)ではなく、
(1942 2114 984)になる。しかし確認してもその前日に作った5040個の数字とすべての数値は等しくなる。これで二時間以上悩んだ。原因は数値を作る時に、例えば「12 」のように半角空白を付け加えてしまっていたことだと分かった。やれやれ。


何の自慢にもならないものを、なんで、こんなプログラムまで掲げたりするのか?について。プログラマーから見てまったくくだらないプログラムであっても、ど素人にとってはそれなりに意味があるんだと。その意味を確認しておきたいと思ったのでした。
(2/3)