澤田秀樹 : C 言語と GAP による暗号と代数プログラミング

作成日 : 2023-02-07
最終更新日 :

概要

「はじめに」から引用する。

前著『暗号理論と代数学』 の知識を仮定してそこに使われる代数学をプログラミングによって解説したとも言える本書が可能になったのもオープンソース方式の恩恵に拠るところきわめて大である。 本書の TeX 原稿,C 言語や GAP プログラミングもすべて著者の LINUX サーバ上で書かれている。

感想

こういう本は役に立つと思う。

第 3 章 C 言語に親しむ

本書の 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 の評価が複数回行われているのが癪なので、評価を一回で済ませる方法があることを示したかった。

第 4 章 GAP を使う

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 判
ISBN4-303-72370-3
その他草加市立図書館で借りて読む

まりんきょ学問所コンピュータの部屋コンピュータの本プログラミング > 澤田秀樹:C 言語と GAP による暗号と代数プログラミング


MARUYAMA Satosi