ISBN4-915673-56-1
などと印刷されているのを見たことがありませんか。
数字は10桁ありますが、最後の数字がXになっていることもあります。
これは、書籍を登録するときの番号です。(筆者は、どこに、どのように
登録するのかは知らない。知っている人がいたら教えてください。)
この番号に間違いがあると大変なことになります(多分)。そこで、
この番号には、少し秘密があります。登録された順に数字が1ずつ
増えていくのではないのです。でたらめな数字を書いても、
そんな番号の書籍はない!と、すぐにバレてしまいます。
どうしてそんなことがわかるのだ!?不思議でしょう。
お答えします。
まず最初の数字を10倍します。次の数字は、
9倍します。次の数字は8倍します。・・・最後から2番目
の数字は2倍します。これらを足します。そして、その合計が
11の倍数になるように、最後の数字を調整します。
そうすると、最後の数字が10となることもあります。
その場合、Xを書くのです。これで、でたらめな数字を
10桁書いても、バレることがおわかりいただけたでしょうか。
このISBN番号をチェックするプログラムを作ってみましょう。
最初にすることは、まず調べようとする数字を入力する
ところを作ります(当たり前!)。次に、正しい
番号かどうか判断する部分を作ります。そして、最後に
その結果を表示します。
多分、こんな流れで作っていけばいいのでしょう。
(筆者は、まだ作っていないので、必ずしもこのようになるとは限らない)
第6章でやったscanfを使えば入力部分はできそうです。
入力された番号は、isbnという変数に入れることにします。
(気にくわなければ、別な名前でも結構です。)
ところで、isbnのデータ型は、何にしましょうか。
最後にXと言う文字が入ることもあるので、文字列が入力
されると考えた方が良さそうです。とりあえず、今回は
この文字列入力のところまで作ってみましょう。
それと、今まではすべてmain関数の中にプログラムを書いていましたが、
カッコワルイので、入力するところは独立した関数にしましょう。
main関数の前に、
int input_isbn(void);と、関数の宣言をしていることに注意してください。自分で 作る関数は、最初に宣言することになっています。 これを、「関数のプロトタイプ宣言」などと言います。 関数の戻り値は、int型で、引数はなしと言う意味です。こんな面倒な ことはできん!と言う方には、別な書き方もあります。(後述)
さて、自作関数input_isbn()の中身を見てみましょう。 最初は、入力される文字列を受け取るための 文字型の配列を用意します。このときかなり多めにして おいた方が安全です。
これを実行してみましょう。
「ISBNを入力してください。」と、表示されたら
適当な数字を入力してください。そして、リターンキーを押すと
「入力された番号は、**です。」と、表示されます。
そしてもう一度何かキー入力をすると終了です。
さて、次に同じプログラムを関数のプロトタイプ宣言
をしなくてもよい書き方を示します。
単に、main関数を最後に書いただけです。
こういう書き方を「ボトム・アップ」といいます。これに対して、
最初の書き方を「ヘッド・ダウン」と呼びます。
お好みの書き方で書いてください。
Update Oct/19/1996 By Y.Kumei