第8章 ISBNチェッカーを作ろう(1)


今までに、出力、入力、文字列などの扱いをざっと解説しました。 これだけ知っていると、結構複雑なプログラムが組めます。 あと、実行順序の制御方法について知る必要がありますが、 これは簡単です。その都度説明します。

さて、前回までの解説でうんざりしている方に朗報です!

今回から、実際にプログラム作りを開始して、必要な事項は、 その都度説明します。でも、もうそんなに複雑なことは ありません。

ISBNは、ISDNの間違いじゃないの!?

ハッハッハッハッ・・・・(笑)
これで正しいのです。ISBNとは、International Standard Book Number の略なのです。雑誌の裏表紙に

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型で、引数はなしと言う意味です。こんな面倒な ことはできん!と言う方には、別な書き方もあります。(後述)
main関数の中にはいると、いきなり自作の関数が呼ばれます。 引数はないので、カッコの中には、何も書いていません。 この関数が呼ばれたあとには、例によってgetch()で、キー入力待ち となります。そして、キー入力があればこのプログラムは終了です。

さて、自作関数input_isbn()の中身を見てみましょう。 最初は、入力される文字列を受け取るための 文字型の配列を用意します。このときかなり多めにして おいた方が安全です。

ユーザーは、我々が思いつかないとんでもないことをする

からです。10文字以上の入力をしたり、時には 2バイト文字の入力をするかもしれません。 isbnは、char型へのポインタであることに、注意してください。 それと、isbnは、この関数の中からしか見えません。 これを、この変数のスコープ(scope,有効範囲) といいます。 これをみると、ウスウス気がつかれたと思いますが、配列の 名前だけの部分は、ポインタなのです。このへんは、あとで 「ポインタ」の章で詳しく解説します。今は、いろいろな プログラムを見て、いろいろなことを「ウスウス」気がつく ことが大事です。

これを実行してみましょう。 「ISBNを入力してください。」と、表示されたら 適当な数字を入力してください。そして、リターンキーを押すと 「入力された番号は、**です。」と、表示されます。 そしてもう一度何かキー入力をすると終了です。


さて、次に同じプログラムを関数のプロトタイプ宣言 をしなくてもよい書き方を示します。 単に、main関数を最後に書いただけです。 こういう書き方を「ボトム・アップ」といいます。これに対して、 最初の書き方を「ヘッド・ダウン」と呼びます。 お好みの書き方で書いてください。



[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Oct/19/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。