LoginSignup
1
0

More than 3 years have passed since last update.

サイエンス社の Information & Computing シリーズから Pascal 関連の書籍を読んでみる

Last updated at Posted at 2019-11-07

はじめに

サイエンス社から Information & Computing というシリーズで Pascal 関連の書籍が出ています。

Information & Computing シリーズ

2019/10 時点で Information & Computing シリーズは 119 までナンバリングされており、別巻も 47 までナンバリングされています。

このうちの Pascal 関連の書籍を読んでみようという趣旨です (別巻は除く)。書籍は時系列になるよう、ナンバー順に読む事にしました。

#16 TURBO Pascal プログラミング

Turbo Pascal 3.0 を対象とした書籍です。
image.png

No タイトル 著者 ISBN-10
(Amazon)
出版年
16 TURBO Pascal プログラミング 玉井 浩 4781904807 1987/8/25

書評

第 1 部が基礎編、第 2 部が応用編となっており、Turbo Pascal について学ぶだけなら第 1 部だけ読めばいいかもしれない。第 2 部はアルゴリズムの説明がメインとなる。

Turbo Pascal を前提とした書籍だが、拡張子を *dpr にしたソースファイルを作れば、殆どのコードが Delphi のコンソールアプリケーションでも試せると思う。

test.dpr
program Test(Input, Output);
{$APPTYPE CONSOLE}
begin
  // ここにコード記述
end.

グラフィック機能については無理だが (本書は NEC PC-9801 版の Turbo Pascal が前提となっている)、ディスプレイ画面制御手続きである clrscr() / clreol() / gotoxy() 等については以下の記事にある Crt32 ユニットを uses する事で使えるようになる。

test.dpr
program Test(Input, Output);
{$APPTYPE CONSOLE}
uses
  Crt32; // <- 追加
begin
  // ここにコード記述
end.

本書中で説明されている スカラ型 は、『J&W』 第 3 版以降または Turbo Pascal 4.0 以降のマニュアルでは 順序型 となっている。ISO や JIS の Pascal 規格にも スカラ型 という語句は使われていない。本書の参考文献に『J&W (第 3 版)』が挙げられているが、用語は Turbo Pascal のものが優先されているようだ。

概念 本書での言い回し 現在の Pascal
スカラ型という分類 スカラ型 順序型
スカラ型という型 列挙型 列挙型

また、Turbo Pascal と 標準 Pascal の差異について多少説明不足な所があるが、第 2 部のアルゴリズムの実装をこなすには全く必要のない情報なのでこれはこれでいいのかもしれない。逆に言えば標準 Pascal への補足もそれなりにある。

∽∽∽ 可否無礼句 ∽∽∽とは何の事だろうと思ったらコーヒーブレイクと読ませるらしい。余談なので堅苦しくない口調で語れている。

ソースコードは J&W スタイル で書かれている 1

program Test(Output);
var
  i: Integer;
  function sub: Boolean;
  begin
    sub := (i = 0);
  end;
begin
  i := 0;
  if sub then
    begin
      writeln('True!');
    end;
end.

個人的な評価: ★★★★☆

See also:

#21 明解 PASCAL

標準 Pascal を対象とした書籍です。
image.png

No タイトル 著者 ISBN-10
(Amazon)
出版年
21 明解 PASCAL
国際規格(ISO)準拠
伊東 正安
金谷 範一
4781905102 1988/5/10

書評

サブタイトル (?) の 国際規格(ISO)準拠 が書いてあるか否かで手に取ってもらえるかどうかが変わってくると思うので、オンライン書店・古書店の方は注意したほうがいいように思う。

(日本語で読める) 標準 Pascal 解説書として重宝すると思う。つまり『J&W (第 3 版)』の代替として使えるのだが、出版された年度からして ISO 7185:1983 対応であり、1990 年の改訂版には対応していない事には注意する必要がある。また、この内容なら演習問題は省いてよかったように思う。

まえがきにある PC-9801 用 PRO-PASCAL (MS-DOS) というのは、これが標準 Pascal (水準 0) であるという記述からして Prospero Software 社の MS-DOS 版 Prospero Pascal の事だと思う。

当時だと大型計算機を除けば、標準 Pascal を (パソコンで) 動作させるための選択肢は限られていたように思う。MS-DOS 向けの標準 Pascal 実装は世界中に存在するらしいが、今では Windows も 64bit が標準なので、また選択肢が狭まってきている。

ソースコードは基本的に J&W スタイル で書かれている。var 等の宣言部が字下げされている。

program Test(Output);
  var
    i: Integer;
  function sub: Boolean;
  begin
    sub := (i = 0);
  end;
begin
  i := 0;
  if sub then
    begin
      writeln('True!');
    end;
end.

個人的な評価: ★★★★☆

See also:

#34 Pascal 入門

標準 Pascal を対象とした書籍です。
image.png

No タイトル 著者 ISBN-10
(Amazon)
出版年
34 Pascal 入門 古郡 廷治 4781905528 1989/7/10

書評

各出版社から同名タイトルの書籍が出版されているためにググラビリティが低い。また、この書籍は教科書ライクで、例題や練習問題の意味を理解するにはまた別の知識が必要となるものも多い。

本書は ですます調 で書かれていることもあり、文章的には Information & Computing の中では読みやすい方だと思う。ただ、例題と練習問題とノートとレベルの高い話が入り混じっているため "構成的に" 読みにくい。ペラペラとめくっていると本文なのかノートなのかわからなくなる。

  • 例題: --- 例題 ------ (枠で囲まれている)
  • 練習問題: ==== 練習問題 =======
  • ノート: --- ノート ------
  • レベルの高い話: ∽∽∽ レベルの高い話 ∽∽∽∽∽∽

練習問題は節の最後にあるのだけれど、改ページされていないために、例題と誤認する。

  • ノートと練習問題は節の最後に改ページして記述してある。
  • 練習問題は章末に (改ページして) まとめて記述してある。

せめてこのいずれかでさえあったならば評価はまた違っていたかもしれない。本書は空行のない Pascal ソースを読んでる気分になるのだ。例えるならこうだ。

function Test1_1(Output);
begin
end;
{
function Sample1_1(Output);
begin
end;
}
function Test2_1(Output);
begin
end;
function Test2_2(Output);
begin
end;
{
function Sample2_1(Output);
begin
end;
}
function Test3_1(Output);
begin
end;
...

「解るけど判りづらい」という表現がしっくりくるかもしれない。実は『#16 TURBO Pascal プログラミング』も同じ体裁なのだけれど、あちらはノートに相当するものがないためそれなりに読みやすい。

若干ではあるが Turbo Pascal について補足があるため、Delphi のコンソールアプリケーションでも練習問題をこなせると思う。

ソースコードは基本的に J&W スタイル で書かれている。program / function / procedure ヘッダの下で字下げされている (ブロックはすべてインデント)。

program Test(Output);
  var
    i: Integer;
    function sub: Boolean;
      begin
        sub := (i = 0);
      end;
  begin
    i := 0;
    if sub then
      begin
        writeln('True!');
      end;
  end.

個人的な評価: ★★★☆☆

#47 Pascal プログラミング 増訂版

標準 Pascal を対象とした書籍です。
image.png

No タイトル 著者 ISBN-10
(Amazon)
出版年
47 Pascal プログラミング 増訂版 米田 信夫
疋田輝雄
桜井貴文
4781905528 1990/8/25

書評

本書の初版は 1979/6/30 に出版されているが Information & Computing シリーズではない。元々はサイエンスライブラリ 情報電算機シリーズの No.38 だったようだ。初版は Pascal 8000 をベースに書かれており 2、コンパイラ指令やコマンドの使い方も載っている。古いには古いが、個人的には初版の方が好みだ。
image.png

No タイトル 著者 ISBN-10
(Amazon)
出版年
Pascal プログラミング 米田 信夫
疋田輝雄
4781902820
B000J8G476
1979/6/30

さて、本書は ISO 標準 Pascal (1983) に合わせて上記書籍を改訂したものだが、内容については評価が分かれるように思う。

個人的には教科書スタイルの書籍は好きでなく、残念ながら本書もそれである。ただ、演習問題が章末にまとめられているため、読み飛ばすのは難しくない。

例題と演習問題は Pascal に慣れていてもいなくても初見では解けないものも多いように思う。しかしながら実はこの例題はアルゴリズム集であり、一度読んだらなかなか二度は読まないであろう教科書スタイルの書籍において、読み返す価値のある不思議な本になっている。巻末の プログラム索引 からアルゴリズムを探せるのだ (普通の索引は別にある)。
image.png
なお、初版はアルゴリズムが半分くらいなので 増訂版 というのは伊達ではない...が、ちょっと詰め込みすぎ。

若干ではあるが、Berkrey Pascal や Turbo Pascal についての補足がある。また、巻末の付録には Berkrey Pascal のコマンドが載っている。

余談だが、カリフォルニア大学バークレー校がこの Pascal やエディタ ex (後の vi) 等のソフトウェアを配布するためにまとめたものが後の BSD (Berkeley Software Distribution) となった。

ソースコードは基本的に J&W スタイル で書かれているが、著者が複数いるためか字下げスタイルにゆらぎがある。

program Test(Output);
  var
    i: Integer;
function sub: Boolean;
  begin
    sub := (i = 0);
  end;
begin
  i := 0;
  if sub then
    begin
      writeln('True!');
    end;
end.

個人的な評価: ★★★☆☆

See also:

#84 Pascalプログラミングの基礎

標準 Pascal を対象とした書籍です。
image.png

No タイトル 著者 ISBN-10
(Amazon)
出版年
84 Pascalプログラミングの基礎 真野 芳久 4781907571 1994/1/21

書評

JIS X 3008:1990 をベースに書かれた教科書スタイルの書籍で、前書きには 「著者が受け持つ情報処理科目の講義資料 (大学 1, 2 年次) を再構成したもの」 とある。

本書には次のような特徴がある。

  • 目次 / コラム目次 / プログラム目次 の 3 つの目次がある。
  • 注釈は脚注。
  • コラムは章末にある。
  • 練習問題は章末にある。
  • 練習問題の解答はない。
  • 21P の "Pascal 言語の概要" が付録 A として付いている。

筆者が多くの Pascal 本を読んで、僕と同じような感想を持ったかのような構成になっている。

前半は特に難しい数学の知識は要らないし、例題には プログラムの考え方 という解説も付いている。後半にはアルゴリズムもあるが、そこに辿り着くまでに Pascal の文法の説明は一通り終わっている。一冊で Pascal とアルゴリズムを覚えさせるのであれば、この構成とこのボリュームが妥当なんじゃないかと思う。

用語がちょっと堅い (文章自体は読みやすい) のとコードのフォントがプロポーショナルで若干読みにくいのを除けば、とてもいい内容に仕上がっていると思う...それでも僕は教科書スタイルの書籍がキライだけれど。

ソースコードは基本的に J&W スタイル で書かれている。function / procedure ヘッダの下で字下げされている。

program Test(Output);
var
  i: Integer;
function sub: Boolean;
  begin
    sub := (i = 0);
  end;
begin
  i := 0;
  if sub then
    begin
      writeln('True!');
    end;
end.

個人的な評価: ★★★★☆

おわりに

Information & Computing シリーズは全体的に堅い印象がありますね。

大学の教科書 (あるいは参考書) として読まれることを想定されているのか、演習問題があるものが多く、割とげんなりします。読んでる途中で演習問題に遭遇すると「解らないからこの本を読んでいるのでしょう?」と言いたくなります。教科書スタイルの本は個人的には評価が低いです。

標準 Pascal なら基本的には『J&W』で勉強した方がいいです。独自性を出そうと思って『アルゴリズム + データ構造 = プログラム』 (以下『A+D=P』)と混ぜたような本は前提となる知識をより多く要求されるので『J&W』よりもかえって難しいです。アルゴリズムはアルゴリズムで別に『A+D=P』で勉強した方がいいように思います。

『アルゴリズム + データ構造 = プログラム』について

Pascal 関連書籍を読み漁っていると、例題や演習問題は『A+D=P』から引かれたようなのが多く「またコレかい!」とげんなりする事もあるのですが、今となってはコードが Pascal で書かれた『A+D=P』の入手性が良くないんですよねぇ...。

ちなみに、『アルゴリズム + データ構造 = プログラム』のソースコードはほぼ Borland スタイルで書かれています。var などの宣言部が字下げされたりされなかったりします。これはヴィルト先生の初期の本共通で見られ、『J&W』の古い版も結構ゆらぎます。あと何故かインデント幅が 3 で、end の後にスペースを入れがちです。

program Test(Output);
var
   i: Integer;
function sub: Boolean;
begin
   sub := (i = 0);
end ;
begin
   i := 0;
   if sub then
   begin
      writeln('True!');
   end ;
end .

See also:

Pascal に関連するその他の Information & Computing シリーズ

タイトルに Pascal が含まれないものの、Pascal を扱った書籍は他にもあるようです。

No タイトル 著者 ISBN-10
(Amazon)
出版年
35 組合せアルゴリズム 仙波 一郎 478190548X 1989/6/1
73 抽象データ型とアルゴリズム M.アズムーデ(著)
野崎 昭弘(監)
仙波 一郎(訳)
4781907121 1993/10/1

#35 組合せアルゴリズム

部分集合生成、順列生成、組合せ生成、自然数分割、応用からなるアルゴリズム集。それぞれのアルゴリズムを、アルゴリズム解説・フローチャート・プログラム (Pascal) の組として収録してある。

ざっくり言うと 数学の問題を Pascal に落とし込むための本。Pascal を知っている事が前提となっており、0 章が「基礎」となってはいるけれど、そこに書かれた "基礎" だけで本書のすべてを理解するのは無理だと思う。やはりある程度の数学の知識が必要。

ソースコードは C のような記述になっている。

program Test(Output);
var i: Integer;
function sub: Boolean;
begin
  sub := (i = 0);
end;
begin
  i := 0;
  if sub then begin
    writeln('True!');
  end;
end.

個人的な評価: ★★★☆☆

#73 抽象データ型とアルゴリズム

『Abstract Data Types and Algorithms』 の邦訳本。Splinger Link で原書をチラ見したけれど、『アルゴリズム + データ構造 = プログラム』とか『アルゴリズムとデータ構造』とか『データ構造とアルゴリズム』を持っているのであれば必要性は...といった感想。また、それなりの数学の知識を要求される模様。

本書を入手していないので、書評は控える。

ソースコードは基本的に J&W スタイル で書かれている。function / procedure ヘッダの下で字下げされている。

program Test(Output);
var i: Integer;
function sub: Boolean;
  begin
    sub := (i = 0);
  end;
begin
  i := 0;
  if sub then 
    begin
      writeln('True!');
    end;
end.

個人的な評価: ☆☆☆☆☆

書評について

書評は 現在での評価 となっています。書籍が出版された時点での評価ではない事にご注意ください。

See also:


  1. 字下げのスタイルについてはこちらを参照の事。 

  2. ほぼ標準 Pascal だが、for in do に似た forall in do や、無限ループ構文 loop~end とそれから脱出するための exit を備えている。 

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0