「はじめに」から引用する。
前著『暗号理論と代数学』 の知識を仮定してそこに使われる代数学をプログラミングによって解説したとも言える本書が可能になったのもオープンソース方式の恩恵に拠るところきわめて大である。 本書の TeX 原稿,C 言語や GAP プログラミングもすべて著者の LINUX サーバ上で書かれている。
こういう本は役に立つと思う。
本書の C 言語の説明は、残念なところがある。たとえば、p.44 のファイル名 string.c のプログラムで、
char a[30];
という文字型配列に対して、scanf("%s",a)
として scanf 関数で標準入力を読んでいるが、
これではバッファオーバーフローの恐れがある。具体的には、C FAQ 12.20 :
どうして誰もがscanf()を使わないほうがいいというのか。かわりに 何を使えばいいのか。を参照してほしい。
私の目からみて、改良の余地があるプログラムがある。たとえば、シーザー暗号のプログラムが pp.56-57 にあり、その核心部分は次のとおりである:
if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z'){
if(ch >= 'a' && ch <= 'z')
i =(ch - 'a');
if(ch >= 'A' && ch <= 'Z')
i =(ch - 'A');
putchar(ss[i]);
}
このプログラムは、標準ライブラリ ctype.h を使えば、つまりプログラムの先頭で #include <ctype.h> を宣言すれば、 次のように書ける。
if(isalpha(ch)){
putchar(ss[toupper(ch) - 'A']);
}
短ければいいということはないが、本書のプログラムでは ch の評価が複数回行われているのが癪なので、評価を一回で済ませる方法があることを示したかった。
GAP とは、計算機代数ソフト Groups, Algorithms and Programming のことである。https://www.gap-system.org によれば、 2023 年 2 月現在が 4.12.2 であり、息長く開発が続けられているソフトウェアだ。この章は GAP の使い方について述べられている。 GAP は対話的に使えるだけでなく、独自の汎用プログラミング言語も持っている。
Kindle 版は最新の情報になっているということだが、私は見られない。気づいた範囲で書き留めておく。
p.19 の上から 5 行めから 6 行めしかし将棋盤の大きさを n × n に拡張した一般化将棋問題といわれるもの
は、
《一般化詰将棋問題》ではないか。もっとも、ここで参照している文献を見たわけではないので、
本当のところはわからない。
p.80 の本文の下から 3 行め、このプラグラム中の
とあるが、正しくは《このプログラム中の》だろう。
書名 | C 言語と GAP による暗号と代数プログラミング |
著者 | 澤田秀樹 |
発行日 | 2000 年 4 月 5 日(初版) |
発行所 | 海文堂出版 |
定価 | 2400 円(税別) |
サイズ | A5 判 |
ISBN | 4-303-72370-3 |
その他 | 草加市立図書館で借りて読む |
まりんきょ学問所 > コンピュータの部屋 > コンピュータの本 > プログラミング > 澤田秀樹:C 言語と GAP による暗号と代数プログラミング