配列
はじめに
これまで、様々なデータモデルを学ぶなかで、数値や文字列、画像や音声などの情報をコンピュータがどのように操作するのかが理解されたと思います。パーソナルコンピュータの上で、日々、人々が便利に使っているアプリケーションの数々はすべて、このような基礎技術を組み合わせて実現されたものです。
そのようなアプリケーションのなかで、もっともポピュラーなもののひとつとして、ワードプロセッサの裏側でどんな仕掛けが働いているのかを、文字列型のセクションでわたしたちは見てきました。ここでは、もうひとつの代表的なアプリケーションとして、表計算ソフトがいかなる仕組みによって動いているのかを見てみようと思います。
メモリーにリズムを刻印する
データモデルの学びの「bit、byte、wordとメモリーマップイメージ」の項で、メモリーが直線的に並べられた一次元のマス目であることを見ました。
______________________ …
人間は、このシンプルなマス目をデザインして、様々なデータモデルを構築してきました。配列もまた、そのようなデータモデルのひとつです。
この一次元のマス目の並びを、一定のインターバルで区切ってみましょう。こんな感じです。
1__2__3__4__5__6__7__8 …
上記のように3つのメモリーをひとまとまりの列と考えて、3組ごとに同じ大きさのまとまりが列をつくっていると考えると、以下のような3列の二次元の表のように扱うことができます。
1__
2__
3__
4__
5__
6__
7__
8 …
何が起こったのかと言えば、メモリの並びをそのように人間が意味づけをしたということです。ただそれだけです。
このように、表のような情報を扱うのに適したメモリの構造を簡単につくることができるのです。このように、メモリーを区画化して行と列の構造をつくり、それぞれの区画に情報を置けるようにした仕組みを配列と言います。
配列
個々の区画の情報は、行と列によって指定することができるため、表のようなイメージで取り扱うことができます。人間の思考方法で扱いやすいように、メモリーの原野を区画整理したわけです。
| A | B | C | |
|---|---|---|---|
| 1 | A列1行 | B列1行 | C列1行 |
| 2 | A列2行 | B列2行 | C列2行 |
| 3 | A列3行 | B列3行 | C列3行 |
| 4 | A列4行 | B列4行 | C列4行 |
| 5 | A列5行 | B列5行 | C列5行 |
| 6 | A列6行 | B列6行 | C列6行 |
| 7 | A列7行 | B列7行 | C列7行 |
| 8 | A列8行 | … | |
これをもっと発展させることもできます。
- 二次元の配列をさらに一定のインターバルで区切ることで、三次元の配列ができます。
- 同様のことを繰り返すことで、さらに多次元の配列を簡単につくることもできます。
直線的に並んだ一次元のマス目から、どんなに大きな次元の配列でもつくることができるわけす。人間の思考は偉大です!
ここで、生徒たちに1次元配列、2次元配列、3次元配列のイメージを黒板や紙の上に描かせた上で、4次元以上の配列をイメージできるかと問うのも面白いでしょう。たとえイメージが困難でも、配列としてはそれを表現することが可能であることも確認します。
表計算プログラムと配列
さて、この方法でつくる配列の場合、一要素のデータサイズは一定である必要があります。メモリーの大きさを単位として区画したからです。
整数だけを入れる表なら、それでも十分に実用的です。しかし、文字列のように長さが変化するデータを配列で扱うには、どうしたらよいのでしょうか? さらに、表の各要素に数値や文字や数式など、多様な情報を入れたい場合はどうでしょうか?
ひとつの要素に余裕をもたせて、そこに入る最大の大きさの要素にあわせてメモリーを割り当てることもできますが、その方法ではたいへんなメモリーの無駄が出ることになります。
ここでまたしても登場するのが、ポインター型です。配列をポインタ型のデータで作れば、一要素のデータサイズを一定に保ったままでどんなタイプの情報でも扱えるようになります。
このような仕組みを駆使して作られた便利なプログラムが、表計算プログラムです。以下の例は、表計算プログラムを使って作成した簡単な帳簿です。二次元配列の仕組みが使われていることがわかるでしょう。
| A | B | C | D | E | ||
|---|---|---|---|---|---|---|
| 1 | ポインターA1 | ポインターB1 | ポインターC1 | ポインターD1 | ポインターE1 | |
| 2 | ポインターA2 | ポインターB2 | ポインターC2 | ポインターD2 | ポインターE2 | |
| 3 | ポインターA3 | ポインターB3 | ポインターC3 | ポインターD3 | ポインターE3 | |
| 4 | ポインターA4 | ポインターB4 | ポインターC4 | ポインターD4 | ポインターE4 | |
| 5 | ポインターA5 | ポインターB5 | ポインターC5 | ポインターD5 | ポインターE5 |
1から5までの行ごとにAからEまでの列があり、それぞれのメモリーにポインター型の情報が納められています。これらのポインター型で任意の型のデータを指し示すことで、表の中身を自由に変更することができるわけです。
この配列でつくられた表に、以下のような情報を設定してみましょう。とたんに、わたしたちが日常で用いている集計表が出現します。表示されているのは、各区画のポインターが指し示しているアドレスに置かれた情報の内容です。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | 日付 | 費目 | 単価 | 個数 | 小計 | 備考 |
| 2 | 3月3日 | ひなあられ | 100 | 5 | C2×D2 | E2:画面上では500と表示される |
| 3 | 3月5日 | あま酒 | 300 | 3 | C3×D3 | E3:画面上では900と表示される |
| 4 | 3月6日 | ひし餅 | 400 | 2 | C4×D4 | E4:画面上では800と表示される |
| 5 | 総計 | SUM E2:E4 | E5:E2~E4を足した2,200と画面上に表示される |
表中の緑色は文字列型、青色は数値型、赤色は数式の情報であることを示しています。表計算プログラムでは、メモリー上のこの表を画面上に描く際に、各区画(表計算プログラムではセルと呼ばれます)に保持されている情報の種類に従って以下のような操作を行います。
- 文字列型:字形パターンを集めてあるメモリーブロックから、文字列の文字コードに対応する字形パターンを順次、その文字を表示させたいフレームバッファ(ビデオメモリ-)の位置にコピーする。
- 数値型:(1)2進数表記を2進化10進数表記(BCD)に変換する。(2)各桁の数値を文字コードに変換する(該当する数字コードがもつIDの値とのオフセット値を数値に足す)。(3)得られた文字列を文字列型と同じルールで画面に表示する。
- 数式(表計算プログラムでは関数と呼ぶ):数式を解釈し、指示に基づいて各セル間の計算を行い、その結果を数値型の手続きに従って画面に表示する。
このほかにも、表計算プログラムは、画面上に罫線を引いて、表らしい体裁を整えるなどの作業を行います。また、各セルの内容を人間が編集できるように、各セルの位置を人間が指定できる仕組みを提供したり、入力された指示を解釈して、入力情報を文字型や数値型に変換してセルに納めたりする仕組みを提供します。
ある程度説明した後に、実際にスプレッドシートを生徒たちに使わせて、表をつくらせましょう。先生は、表をつくりながらその背後で何が起きているのかをイメージしながら作業するよう、生徒たちにアドバイスします。
とても簡単に見える表計算プログラムの背後で、実に多くの行程が実行されているわけです。利用者がストレスなく表計算プログラムを利用可能としているのは、単位時間中に非常に多くの行程を処理できる現代のCPUの猛烈な処理速度であることを生徒たちに確認しておきましょう。
表計算プログラムの歴史
ある程度、配列と表計算プログラムのことが理解できたら、表計算プログラムの歴史に触れておくとよいでしょう。

世界で最初に普及した表計算ソフトは、アップル社のApple IIというパーソナルコンピュータのプログラムとして開発されたVisiCalcと言われています。1980年におけるApple IIの売上の7割は、VisiCalcを動かすためだったというくらい、画期的なソフトでした。*1
このプログラムが、それまでマニアの「おもちゃ」だったコンピュータを、ビジネスで使える汎用の道具へと変身させたのです。
VisiCalcを作った共同制作者のひとり、ダン・ブリックリンはマサチューセッツ工科大学で電気と計算機科学を学び、ディジタル・エクイップメント社(DEC)でワードプロセッサの開発を行っていましたが、思い立って会社を辞め、ハーバード・ビジネス・スクールで経営学を学んでいました。
そんなある日、彼は様々な金融モデルについての講義を受講していました。教授は黒板にマス目を描き、その中に金融を構成する要素ごとの数値を配置し、それぞれの金融モデルを表現する数式によってそれらの数値がどのように変化するか説明していました。
コンピュータの構造に精通し、メモリー上に表現される数値をありありとイメージできたダンに、ひらめきがやってきました。
そうです。もちろんそれは、「この黒板の上の操作をコンピュータのメモリーの上で行えばよいのだ!」という考えでした。
ダンは仲間と一緒に、この黒板の上で行われていた操作を、配列上の情報操作に置き換え、その処理結果をコンピュータの画面上に表示するプログラムを書き上げました。プログラムは「ダン・ブリックリンのデモプログラム」と呼ばれ、1978年の春にApple IIの上で動作しました。
ダンらはプログラムの改良を続けながら、翌年、いくつかのコンピュータ見本市でVisiCalcと命名したプログラムのデモンストレーションを行いました。これがたいへんな好評を博すことになります。
Apple II専用のプログラムだったため、VisiCalcはたちまちのうちにビジネス用のパーソナルコンピュータの地位をApple IIが独占するキラーコンテンツとなったのです。情報源は定かではありませんが、1980年のApple IIの売上の7割がVisiCalcのためだったとも言われているほどでした。
これがVisiCalcの誕生、そして表計算プログラムの始まりでした。人々にとって重要だったのは、コンピュータ装置自体の素晴らしさよりも、そのコンピュータ上でどんなプログラムが動くかということだったのです。
おわりに
表計算プログラムと結びつけることによって、配列の性格を生徒たちは生き生きと理解することでしょう。同時に、表計算プログラムの背後で、配列上の情報がどのように操作され、画面上に投影されているのかを生徒は理解するでしょう。このような学びのアプローチこそが、データモデルの学びの神髄です。
コンピュータの様々なソフトウェアは、人間が、自分の思考をどのように操作しているのかを整理し、それをデータ構造の定義とその操作アルゴリズムをプログラムに置き換えていくことによって作られているのです。
- ヴァルドルフ/シュタイナー教育におけるICTカリキュラムの骨格を形づくる
- The History of Computers(Currently being produced)
- リレーによる加算機回路製作の詳細
- シーソーによる論理素子
- クロックとメモリー
- リレーの起源と電信装置
- シーケンサーについて
- About the Battery Checker(Currently being produced)
- インターネット
- データモデルの学び
- Learning Programming and Application Usage Experience(Currently being produced)
- Human Dignity and Freedom in an ICT-Driven Society(Currently being produced)


コメント