Pascalプログラミングの基礎 (Information & computing (84))

Pascalプログラミングの基礎 (Information & computing (84))

やっとこさ、読み終えました。
近似式プログラミングの学習のためのテキストがPascalで記述されているという
ことで、Pascalの教科書を中古で急遽購入することになりました。
いざ、読んでみて、とてもいいなと思いました。

筆者 真野 芳久 先生
1971年 京都大学 理学部数学科 卒業
1971年 電子技術総合研究所 入所
    言語処理研究室主任研究官 情報ベース研究室室長
1991年 南山大学経営学部情報管理学科教授
現在に至る
工学博士

数学プロパーの人が書いたプログラミングの教科書と向かい合うのは実は
日本人でははじめてかな。
「ゲームプログラミングの数学」あれは、数学科(アメリカの大学)の人が書いたもの。
計算業務を片付けることが「目的」で、プログラミングは「手段」だとすると、
「目的」にくわしい人と、「手段」にくわしい人は、どちらが教育の立場に向くのかは
微妙な問題だと思います。

随所に「数学的」な説明がちりばめられていて、なんとなくだまされているようなそんな感覚が
少なくなります。

wikipedia:ブレーズ・パスカル


目次

プログラミングとPascal

1-1 プログラミングの意味
1-2 プログラミング言語
1-3 Pascal言語
1-4 規格と処理系
1-5 プログラミング言語の定義

2章 Pascalプログラムの概要
2-1 プログラミングの過程
   プログラムの作成 ソースプログラムファイルの作成
   コンパイル 実行
2-2 基本的なPascalプログラム
   予約語 変数 標準のデータ型 変数宣言
   整数型と実数型 整数型と実数型の式 代入文
   文の連続実行 入力文 出力文
2-3 関数電卓並の計算をするPascalプログラム
 注釈(コメント) 標準手続きと標準関数
2-4 標準関数の応用
   定数定義

第3章 選択と繰り返し
3-1 論理型 
   論理型の変数 論理式 論理型変数と論理式の例
3-2 条件の真偽による選択
  複合文 if文 if文の応用
3-3 とりうる値による場合わけ
   文字型 case文 case文の応用
   if文とcase文についての補足
3-4 繰り返し範囲を指定する繰り替え足
   for文 for文の応用 制御文の入れ子
3-5 条件による繰り返し
   while文 repeat文 繰り返し文についての補足
   while文とrepeat文の応用
3-6 goto文
   goto文

第4章 配列データ構造
4-1 データ構造
4-2 配列
   部分範囲型 1次元配列 逐次探索 番兵
4-3 配列の応用(1)
   データ型定義
4-4 多次元配列
4-5 配列の応用(2)
 Packed型(詰めあり方) 文字列型
 整列アルゴリズム(選択整列) 二分探索

第5章 手続きと関数
5-1 手続きと関数の猪木
5-2 手続きと関数の概要
5-3 手続きと関数を含む実行の順序
5-4 引数
5-5 手続きと関数の記述方法
   手続きと関数の東部 手続きと関数のブロック
   大域名と局所名 手続きと関数の効用
5-6 手続きと関数の応用(1)
 手続きと関数の入れ子 有効範囲規則
5-7 再帰的手続きと再帰的関数
5-8 手続きと関数の応用(2)
  相互再帰   

第6章 ファイル処理
6-1 標準入出力
6-2 標準入出力を利用したテキストファイル処理
6-3 一般のファイル処理
   ファイル型とファイル変数 ファイルのオープン
   バッファ変数 データの入力 データの出力
6-4 テキストファイル処理
6-5 ファイル処理の応用
6-6 外部ファイルと内部ファイル

第7章 静的データ構造
7-1 列挙型
7-2 集合型
7-3 レコード型
   レコード型の構造 with文
7-4 レコード型の応用
   可変レコード型

第8章 動的データ構造
8-1 ポインタ
8-2 線形リスト構造 
   リスト構造の新規作成 リスト構造への挿入
   リスト構造からの削除 リスト構造の探索
   リスト構造の応用(1) 再帰的データ構造
   リスト構造の応用(2) リスト構造の応用(3)
   双方向リスト構造 整列アルゴリズム(挿入整列)
8-3 木構造
   二分木 二分木のためのデータ構造
   木構造の新規作成 全節点の訪問
8-4 二分探索木
   二分探索木の探索 二分探索木への挿入
   二分探索木の節点の削除

ここが、読んでいて、一番面白かった。
この本は、あまり分厚い本ではありません。本体部分は230ページちょいです。
なのに、ここまでブロードに、いろいろなことを詰め込んでいてびっくりです。
これが、標準なのかな。
↓これなどは、受験的に面白いです。英単語集をデータ駆使して作ろうと思ったら
こういう方法で作ればいいのかと感動。

例題 8-4 出現単語の頻度表
英文テキストファイルを読み込み、現れる単語とその単語の出現頻度とを単語の辞書式順序で出力するプログラムを作りなさい。単語は英字で始まり、英字の続く最長文字列とする。

第9章 手続きと関数の活用
9-1 手続き・関数引数
9-2 整合配列引数
9-3 手続き・関数引数と整合配列引数の応用

第10章 基本的なアルゴリズム
10-1 アルゴリズムと性能
10-2 探索
   ハッシュ法
10-3 整列
   クイックソート ヒープソート 併合整列
10-4 文字列称号
   単純照合法 BM法

悲しいことに、ここはあまりついていけませんでした。

第11章 応用プログラミング
11-1 数値計算プログラミング
   数値積分 数値計算プログラミングの注意点
11-2 発見的プログラミング
11-3 バックトラックプログラミング
11-4 部品プログラミング

2回目を通してみると、何をやりたかったのかが、わかってきます。
惜しむラクは、積分の計算を説明するのであれば、もう少し、「図」を多用しても
いいのではないかと思いました。紙数の圧縮のためでありましょうけど、残念では
あります。そこのところは、「解析」の教科書で自習しろということなのでしょう。
じゃんけんの勝率を最大限にするアルゴリズムの例など、とても面白かったです。
たしかに、1000回もじゃんけんをしていたら、手を出している自分でも気がつかない法則性という
ものが、統計を駆使することで割り出すことができるのだろうなと思いました。

参考文献
Pascal言語の概要
構文図
Pascalの字句
Pascalの標準名
標準名の一覧 標準関数 標準手続き
演算子の一覧表
データ型の分類
型の適合性と代入可能性
有効範囲規則

符号表
ISO符号表(ISO646)
JIS7単位符号表(JIS X0201)
EBCDIC符号表

プログラミングの教科書なので、色々なプログラミングの具体的ケースが
出てきます。
筆者が、京都大学の理学部数学科出身であることを反映しているのか、数学の計算を
するためのプログラムがほとんどです。
Pascalが、「教育的」プログラミング言語であるということがどういうことなのか、
なんとなくわかるような気がします。

数学で学習する計算をコンピューターにやらせるということは、一番抽象的な
作業を、PCに任せる訓練になります。
一番抽象的な作業をする訓練をしておけば、具体的な作業をいざするときには、ある程度の
「応用」が利きやすい。
そういう含みがあるのかなと思いました。

なんというか。数学の成績をみていると、わかりますが、丁寧な「解答」を作成できない人が
います。
説明なしに、いきなりある数が出てきたり、計算過程などが省略されていたり、
「コミュニケーション能力」に問題ありという答案というのは、数限りなくあります。
そう、数学を大学でしっかりと勉強した人は「まともな数学の問題に対する答案を書く」
というセンスに長けていると思うのです。そして、このセンスはそのまま「読みやすいプログラミング」を記述するということにダイレクトにつながります。
私がこの教科書を読んでいて、気分がよかったのはだからではないかと思います。
もっとも、最後のアルゴリズムあたりになってくると、つらいです。
ポインタと線形リスト構造を組み合わせて、色々な芸当を学習するのですが、ちょっと
つらかった。