高等学校情報/社会と情報/未分類

情報伝達の過程で、集めた情報を他人に見せることが必要になることがしばしばある。この時、何らかの方法を用いて他人に取って理解し易いように情報を成形することが、円滑な情報伝達を行なう上で望ましい。
例えば、ビジネス文書では、書きたい内容のそれぞれに対して定まった書式が決められていることが多い。また、所定の位置に 印鑑、はんこ か、サイン(署名)が存在しないと、それは情報が伝達されたと見なされないのである。同様に、特に公共機関や法律に関連する機関では、書類の形式が非常に重視される。それは、これらの機関は文書を通じて情報を伝達することで、出来る限りの情報を保存可能な形にしようとしていることによっている。
よりインフォーマルな場でも、円滑で、意味の取り違えの起こりにくい情報伝達を行なうには、いくつかの指針がある。例えば、
などがあげられる。特に文書では、わかりやすく明確な文を書くことが円滑な情報伝達につながる。特に、自分が話したい内容を相手に口頭で伝えることをプレゼンテーションと呼ぶことがある。プレゼンテーションの形式は様々だが、 何らかの会場や会議室での発表といった形式をとることが多い。このとき、発表者が話したい内容はあらかじめ資料として簡潔にまとめておき、発表の際には観客にとって見やすく、また話の進行を助けるように、提示されることが望ましい。
日本ではプレゼンテーションのことを「プレゼン」と略すことも多い。
特に、コンピューターを用いた手法によって、プレゼンテーションを支援することが出来る。このような手法として用いることが出来るソフトウェアをプレゼンテーションソフトと呼ぶことがある。ソフトウェアという言葉の意味は後に情報Aの中で説明される。
プレゼンテーションソフトとは、用いる人間の書いた文字や絵などを、画面に表示することを目的としたソフトである。プレゼンテーションソフトには複数あるが、それぞれが文字の入力や絵の作画などの手法を提供していることが多い。ここでは、特に文字だけを情報として扱う。図形などを統合的に扱うことは次章のテーマである。プレゼンテーションのソフトにはいくつかあり、どれが用いられるかは学習者の環境によって異なる。しかし、ここでは特にLibreOffice Impressを用いる。これは、このソフトが多くの環境で動作し、また安価(普通に使う場合ならソフト代金は原則的に無料)であることによる。
プレゼンテーションの課題は、'自由にテーマを選んでそれについて簡単にまとめよ。ただし、プレゼンテーションの手法としては、基本的に文字だけを用いることにする。しかし、余裕があれば図形や映像を用いて、より強い印象をあたえるようなプレゼンテーションを作成してもよい。'とする。
一般にプレゼンテーションは、文字を多用するよりも、図やアニメーションなどを用いて、ポイントだけをまとめた方が、相手に話者の意図が伝わりやすいとされる。
口頭で発表するため、時間的な制約があるので、仮に多くの文章を書いたとしても、発言しきれない。なので、プレゼンテーションでは細かく情報を伝える事は困難であるので、細かい情報を伝えたい場合は、レポートを配布(はいふ)するなど、プレゼンテーションとは別の機会に伝達する必要がある。
しかし、ここではプレゼンテーションソフトの使用法を詳しく学ぶことが目的というわけではないので、基本的に文字だけを用いてもよい。既に使用経験がある人は、より高度な機能を用いてもよいだろう。ここからは実際のプレゼンテーションソフトの使い方について簡単にまとめるが、プレゼンテーションソフトが既に起動されているものとして話を進める(基本的なコンピューターの扱いについては、巻末の付録を参照)。
プレゼンテーションソフトの編集画面は通常どれも似通っており、実際にプレゼンテーション中に画面に表示される絵が、表示されている。各々の絵は、スライドと呼ばれることがある。設定によるが、これらのスライド内にはタイトルを書き入れるボックスと、箇条書きを書き入れるボックスが並んでいるはずである。これらのボックスをクリックすることで、ボックス内に日本語を入力することが可能になる。日本語の入力法については付録を参照。また、上のメニューで、
を選ぶことで新たなスライドを作成することが出来る。まとまりのよいプレゼンテーションをするには、適切な枚数のスライドを作ることが重要である。ある程度内容ができたら、
を選び、内容を保存する。保存場所は環境によって異なるので、注意が必要である。実際にスライドを表示するには、
を用いる。スライドショーの画面からはエスケープキーを押すことで抜けることが出来る。
ここからは、インターネットに代表される情報通信ネットワークでの、情報収集について具体的に述べる。コンピュータを用いた情報通信ネットワークは、コンピューター同士を様々な機具を用いて接続し、お互いが持っている情報を通信しあう事で、成り立っている。しかし、単純に情報を受け渡すだけでは、不都合な事態が生じる。
例えば、銀行の暗証番号や性別、収入、家族構成などを含む、個人のプライバシーに関わる情報は、例え、ネットワークに接続されているあるコンピューター上にあったとしても、他のコンピュータに伝達されないことが望ましい。このため、情報通信ネットワークに加わるコンピュータは、特に機械が持っている情報を他に渡さないようにすることも出来ることが求められるのである。
また、掲示板やコミュニティーサイトなどで用いられるパスワードは、多くの場合には他人に知られてはいけない文字列を用いるが、しかし、そのパスワードを用いて、パスワードを入力した人が対応する人であることを調べる人は、もちろん、そのパスワードが何であるかを知っていなくてはならない。そのため、パスワードの管理者は、通常はパスワードが外部にもれないよう注意しながら、必要なときには自由にパスワードを取りだせるように工夫する必要がある。
次に、ネットワーク内の情報が非常に多くなり得る事によって引き起こされる問題について述べる。情報通信ネットワークに参加できるコンピューターの数は、非常に多くなり得る。仮に接続されているコンピューターが増えても、自分に必要な情報がどこにあるか分かっているときには問題にはならない。例えば、自分の友人が持っている情報が必要で、それを手に入れたいときには、単に自分の友人のコンピューターと通信を行なえばよいのである。
しかし、自分に取って必要な情報がどこにあるかが分からないときには、それを探しだす事が非常に困難になる。既存のメディアと比較するために例をあげて考えてみる。例えばある自然現象について、それに関する情報を書籍を用いて調べたいとするとき、それらを見つけることはそれほど困難ではない。というのは、通常図書館などの施設では、本の内容ごとに本の置き場所が決まっており、ただ情報の種類を指定するだけで、 必要な書籍のおおまかな位置が分かるからである。一方、情報通信を用いたときには、多くの場合に情報は人間が内容を把握するのには適切でない方法で蓄積されるため、それらのおおまかな内容を把握するのがそれほど簡単ではないことがある。このため、ネットワーク上の情報の内容を把握し、ある情報がどの位置にあるかを調べる方法が必要となった。
これの対策として、いくつかの方法が実際に用いられている。ここではそれらの工夫の題材として、WWW(ワールド ワイド ウェブ)と呼ばれる通信の種類を用いるが、それらの詳しい動作原理は高等学校情報Cの範囲である。
現在のインターネットの重要な用途の1つとして、webページの閲覧があげられる。ここでいうwebページとはいくつかの要素が組み合わさったものであり、その内容は割合複雑だが、
プロトコルはhttpを用いて、情報の受け渡しを行ない、 受け取った情報を解釈するのは、クライアント側のブラウザの仕事 である。
大雑把には、
という手続きをくり返すことで、2つのコンピューター間の、情報の伝達を行なう。 ただし、このような手続きで送り返された情報には、多くの場合、それに関連する情報の場所が記されており、情報を探している側は、それを用いて、更に検索を続けることができる。ここで、webページは送られた情報自体の事を指す。これらの手続きそのものは、w:www、ワールドワイドウェブと呼ばれることを注意しておく。
さて、wwwで受け渡される情報の中には、人間が読んで理解できるものも多い。更に、その中に人間が探している情報があるかどうかは、その中に含まれる単語を調べることで、多くの場合知ることが出来る。例えば、先ほどの自然現象の例では、その現象の名前が書かれている情報を得ることで、その現象に関する情報が得られる可能性が高いことが予想される。そのため、あるwebページ上に含まれている文字列をあらかじめ調べておくことで、ある人が欲しい情報がどこにあるかを知ることが出来る。このような技術をw:検索と呼び、特にwwwの情報に関する場合には、'web検索'と呼ばれることがある。
このような技術は、いくつかの会社がwwwの中で提供している。有名なものとしてw:google、w:yahoo、w:msnなどがある。
などがあり、無料で用いることが出来る。各々の会社の検索手法は会社ごとに異なっており、いくつかの検索を試してみることで、より良い結果が得られる事がある。
ここでは、コンピュータを用いて、情報を処理する方法を学ぶ。コンピュータは様々な情報を扱うことが出来、それらを統合的な表現にすることが出来ることに注意する必要がある。
コンピューターは情報をデジタル化して扱う。デジタルデータは、加工や複製が容易であり、様々な情報を組み合わせて扱うのに適している。実際、現在のコンピューターは、映像、動画、音楽などの様々な情報を扱うことが出来、それらを組み合わせて用いることがなされている。しかし、これらの情報を扱うことはそれほど簡単ではなく、ハードウェアとソフトウェアの両面で多くの努力がなされて来た。
ここで、ハードウェアとは、実際に触れることが出来るコンピューターのパーツなどのことであり、キーボード、マウス、ディスプレイなどがその例である。これに加えて、場合によってはコンピューターの箱に入っていて見えないことがあるが、[CPU、ビデオカード、サウンドボード、ハードディスクなどによって、コンピューターは構成されており、これらも総称してハードウェアと呼ばれる。
一方、ソフトウェアはハードウェアを動かすための命令群のことであり、通常様々なw:記憶装置に記録されており、必要に応じて読みだす形式を取っている。ここでいう記憶装置とは、ハードウェアのうちで特に情報の記録を目的として用いられる装置の総称であり、ハードディスク、CD、DVDなどがある。ソフトウェアは、ハードウェアと違い、一度作成すれば簡単に複製できるため、ハードウェアよりも扱いが簡単であるといわれる。しかし、実際には高度なソフトウェアは、1つの間違いが重大な結果を引き起こすことも多く、ソフトウェアもハードウェアと同様、設計や作成に細心の注意をはらう必要がある。
ここでは実際にコンピュータを用いて複数の情報を扱う実習を行なってみる。用いるソフトウェアは、文書処理,表計算,図形・画像処理などを扱うソフトウェアである。
実習の課題としては、'少なくとも1つの表計算ソフトによって作られた表と、1つ以上の画像を含んだ文書を作成せよ。文書のテーマは自由とする。ただし、作成された表の中では、少なくとも3つ以上の数値データを含んだセルと、少なくとも1つの関数を含んだセルを用いるものとする。作られた表は'埋め込み'形式で、文書内に書きこむものとする。また、用いる画像の保存形式は指定しない。'を用いる。ここで、'埋め込み'とは、用いたデータを後に編集したとき、その変更が文書内の表に反映されないことを表わす。一方、変更が反映されることを'リンク'と呼ぶ。
実際に用いるソフトは学習者の環境によって変わってくる。ここではLibreOfficeを扱う。LibreOfficeを起動する方法は環境によるので、ここでは述べない。ここからはLibreOfficeが起動できたものとして、話を進める。
設定にもよるが、起動した画面では
などのボタンがある。これらはプルダウンメニューと呼ばれることが ある。ここでは、文書処理が行ないたいので、ファイル - 新規作成 - 文書を選択する。これによって、新規の文書が選択される。文書中をクリックすると、文書内にカーソルが表示されるので、これを用いて日本語入力を行なう。
表計算ソフトを用いて表を挿入したいときには、プルダウンメニューから、
を選択する。これによって、表計算ソフトが起動する。
表計算ソフトは、縦と横の座標で指定されるマスの中に、数値などを書きこみ、それらを用いて様々な計算を行ない、データを加工などを行なうソフトウェアである。それらのマスは'セル'と呼ばれる。通常、これらのソフトは文書処理とは別のソフトウェアであり、これらの表を、文書処理ソフト中で扱えるかは与えられた環境による。
ここでは、そのような手法が可能であるとして、話を進める。表計算ソフトで作成した表を、文書処理ソフトで作成した文書とは別のデータとして保存し、その内容を文書中から呼び出すことも可能である。そちらの方法でも同じ結果が得られるので、余裕があればそれも試してみてもよいだろう。
表計算ソフトでは、カーソルはそれぞれのセルを扱うように用いられる。それぞれのセルに日本語や数値を書きこむことが出来るので、自由に書きこむとよい。ただし、数値だけが書かれたセルは3つ以上なくてはならない。
表計算ソフト中では、それぞれのセルの内容を用いて、別のデータを作成することができる。これは、自由に選んだセルの中に特別な意味を持った命令を書きこむことで、なされる。このような命令を、'関数'と呼ぶことがある。この名称は、数学的な関数とは異なった意味を持つことがあるので、注意が必要である。例えば、現在の時刻を得る関数が存在するが、これは、数学的な意味の関数ということは出来ない。簡単な関数の例として、ここでは
などを用いる。sum()は、対応するセル中に書かれた数字の合計を求める関数である。対応するセル中には半角で書かれた数字を書かなくてはいけない。
うまく指定が出来れば、与えられたセル中の数字の、合計が得られるはずである。一応、それらの数値が正しいかどうかを確認しておくとよい。これらのデータを保存すれば、表計算の埋め込みは完了である。
次に、同じ要領で、
を元々の文書内に埋めこむ。図形処理ソフトの使い方は通常直観的なので、それほど苦労することはないだろう。図形が完成して保存が終われば、課題は完了である。時間があれば、更に進んだ機能に挑戦してみてもよいだろう。ただし、マクロ、LibreOffice_Basicは、高等学校情報Bの範囲なので、ここでは扱わない。
ここでいう情報機器とは、情報を伝えるために用いられるあらゆる装置のことを表わしている。古くは、郵便、電話などが遠方の情報を伝えるために用いられていた。このうちで、特に電話は、アナログの情報伝達を行なっている。w:電話は、音の波形を電気的な波形に変換してそれを伝達し、受け手側の装置で再びそれを音として扱うことで情報を届けている。ここで、電気的な波形は相手側で現われた情報の全てを持っていることが重要である。
一方、現在実際に用いられている情報通信ネットワークでは、情報は基本的にデジタルデータとして表わされる。デジタルデータは情報を全て数値として扱う。例えば、表計算ソフトで扱ったような数値は、数値のデータの例である。一方、音声や映像などのより複雑な情報も、数値として扱うことが出来る。ただし、実際に生じる音声や映像を、数値化する過程で、情報を多少なりとも変質させることが避けられない。これは、これらのデータを数値として扱えるような処理をするために必然的に生じる欠点である。
一方、デジタルデータにはアナログデータにない良い点もある。デジタルデータは、基本的に数値で表わされる情報なので、情報の劣化をおこすことがない。一方、例えば、レコードやビデオテープなどのアナログの記録装置では、何度も再生をくり返しているうちに、データが消えたり、質が落ちたりすることが避けられない。加えて、デジタルデータはこれらの複製を作ることが非常に簡単である。一方、上であげたようなアナログの記録機器は、これらの複製をするときにも、これらの情報を移しかえる過程で、多少なりとも、質が劣化することが避けられないのである。
このようにデジタルデータには、既存のデータ保存の方式と比べて良い点がいくつかあるため、この方式の利用はこれからも増えていくものと考えられる。
情報通信ネットワークの発達は、我々がこれまでに無いほどの量の情報を手に入れることを可能にした。結果として、我々の生活の多くは、変革を迫られることになった。
例えば、現在では我々のうちのいくらかの割合ががw:携帯電話を持っており、どのような時にでも連絡が取れるようになっている。 また、コンピュータを用いて情報通信を行ない、様々なサービスが受けられるようになった。特にインターネットサービスの発展は、これまでに無かったサービスを可能にした。例えば、インターネットバンキング、オンラインショッピング、オンライン予約などがその例である。
加えて、職場では、ITを用いて業務を効率的に行なうことが、経営を行なう上で非常に重要になっている。例えば、遠方との連絡を電子メールなどで行なったり、オフィス文書を統合ソフトウェアを用いて効率的に作成することなどが例としてあげられる。更に、w:サーバを用いて、作成した文書などを何人かで共有し素早く閲覧、変更などを行なうことも行なわれている。'サーバ'について詳しくは、高等学校情報Cを参照。
一方、これらは我々の生活を便利にすると同時に、様々な問題を引き起こすようになった。例えば、インターネットを用いて、子供でも簡単に不適切な情報を手に入れられることが問題としてあげられる。また、それぞれのコンピューターに対してw:コンピュータウイルスなどを送り込み、それらの中にある情報を奪い取ろうとする新しい犯罪が生じるようになってきた。情報技術は様々な問題を生み出しながら、現在でも発展を続けている。このような情報技術を適切に用いるには、それに関する学習を怠らず、新しい技術とそれに関する知見に接し続けることが重要となるだろう。
情報社会がもたらす問題と、それに対する対応策についてまとめ、それを用いて討議を行なう。
情報技術は、現在広範な個所で用いられており、我々の生活の重要な一部を占めているといえる。しかし、情報技術は同時に多くの問題をかかえたものでもあり、これらを適切に活用することが情報技術を役立てるにあたって、非常に重要である。また、情報技術は現在でも発展を続けており、以前常識と思われていたことがそうでなくなるまでの時間が、非常に短い時期が続いている。そのため、将来に渡って、情報技術に興味を持ち、これについての学習を続けることが重要である。
コンピュータを起動するときには、まず電源をいれる。電源はコンピュータの正面についていることが多い。
環境によってはパスワードの入力を求められることがある。ここでは自分のユーザー名とパスワードを入力する。通常、これらはシステムの管理者から支給されるはずである。無事に認証が済むと、再びグラフィカルな画面が表示される。この時、マウスを動かすとカーソルが動くはずである。この画面から、マウスを用いた操作で様々なソフトウェアを起動することができる。 ここでは、オフィスソフトしか用いないが、そのソフトの起動の仕方は環境に よる。
続いて、日本語入力について述べる。日本語入力は専用のソフトウェアを用いてなされるが、そのソフトの起動の仕方も、環境によってまちまちである。ここでは日本語入力が可能になったものとする。日本語の入力方式としてはw:ローマ字入力とかな入力が代表的である。ローマ字入力はローマ字のつづりの通りにキーを打つことで、日本語を入力する方式である。一方、かな入力とは、キーボードに書いてある日本語の文字に対応するキーを打つことで、日本語を入力する方式である。どちらの方式を用いてもよいが、英文を打つときのことを考えると、ローマ字入力で慣れておいた方がよいかもしれない。
高等学校情報Aでは基本的なコンピューターの使い方を学んだ。情報Bでは、より複雑なコンピューターの使用法を学ぶ。
コンピュータは与えられた命令を順番に実行することで動いている。この際、その命令の内容はコンピュータによっては吟味されず、仮にその内容が危険なものであっても、コンピュータはそれを実行する。
そのため、コンピュータに命令を与える時には、実行したい命令を正しい順番で与えることが重要である。
コンピュータでは様々な仕事をすることが出来る。しかし、全ての仕事がコンピュータに取って向いているわけではなく、中には、コンピュータに向いていない仕事もある。
コンピュータはもともと計算を素早く行なうために作られたことから、非常に早く数値的な計算を行なうことが出来る。また、ネットワークを通じて情報を伝達することが出来るため、遠距離とのデータ通信を行なうことにも適している。
一方、コンピュータは"考える"ことができないため、新しい事柄を考え出すことは出来ない。また、コンピュータは映像や音楽を扱うことが出来るが、人間のように、映像や音楽に関するおおまかな雰囲気を伝えることは不得手である。


ここまでにもコンピュータが与えられた命令を順に実行していくことを述べた。ここでは、コンピュータが具体的にどのようにこれらの命令を実行するかを述べる。
コンピュータはCPUを含んでいるが、コンピュータが実行する命令は、全てCPUによって実行される。そのため、コンピュータに対する命令は、CPUの動作を制御することが目的となる。具体的には、CPUは、あるデジタルデータによって表わされる命令を受けつけて、それに対応する命令を実行するように作られている。このため、適切なデータをCPUに与えることで、CPUを思い通りに動かすことができるのである。詳細についてはw:CPU、w:機械語などを参照。
このとき、コンピュータを扱う人間は、CPUがどのような命令に対して、どのような動作を行なうかを、把握していなくてはならないように見える。ただし、実際には、そのような命令を出す作業自体を、コンピュータに代行させることができるため、コンピュータの利用者全てが、そのような命令を把握していなくてはいけないというわけではない。実際キーボード、マウスなどを用いてコンピュータに指示を与えることができるが、それらが具体的にどのような命令に対応するかは、コンピュータの構成、特にOSの機能によって異なる。
ここで、コンピュータのこの性質を用いて、コンピュータに行なわせることが出来る仕事を、具体的に述べる。
コンピュータが行なうことが出来る仕事として、古くから知られているものに、'並べ替え'と'探索'がある。並べ換えとは、ある条件に基づいて、与えられたデータの順番を並べかえる操作のことであり、探索とは、与えられたデータの中から、対応するデータを探しだす操作のことである。このように、コンピュータを用いて行なう作業のことを、アルゴリズムと呼ぶことがある。より高度なアルゴリズムについてはw:計算機科学などを参照。
まずは、探索について述べる。ここでは線形探索と呼ばれる手法について述べる。線形探索とは、複数のデータが与えられたときに、それらを順番に探しているデータと比較し、それと等しいデータを探すという探索法である。探しているデータが見つかったときには、見つかったという情報を返し、探しているデータと等しいものが無いときには、探索が失敗したという情報を与える。具体的にコンピュータに探索を行なわせる手法を述べる。
探索されるデータ群と、探すデータの種類は、CPUに与えることができるものとする。具体的な探索手順は次のようになる。
ここで、コンピュータの命令は、基本的には与えられた順に行なわれるが、CPUに対するある命令は、命令が実行される順番を変化させることを注意しておく。上の例では2の中で、'4に進む'という手順があるが、これは、コンピュータの命令が、常に与えられた順になされるのなら、不可能である。
次に、並べ替えについて述べる。ここでは、w:選択ソートと呼ばれるアルゴリズムについて述べる。選択ソートとは、与えられたデータの中から最も大きいものを順番に見ていくことで探しだして、それを最初に持って来て、残ったものの中で同じ事をくり返すという方法である。小さい順に並べるには、これをデータの中から最も小さいものを取りだすという手順に入れ換えて、行なえばよい。選択ソートはデータの数が多いときには非効率であることが知られている。
より高速なソートについては、w:計算機科学、w:クイックソートなどを参照。 具体的な手順は、
というようになる。これは単純に見えるが、複数のデータの中から最大のものを探しだすことは、通常CPUの命令としては存在しない。そのため、このような手法も、CPUに対する命令として、作成しなくてはならない。具体的には、次の手順となる。
これらを適切な情況で呼び出せばよい。このように、ある汎用的に用いられる命令群を作成して、適宜呼び出して用いることが出来るとき、この命令群のことをサブルーチン(副命令)と呼ぶことがある。サブルーチンを呼び出すには、CPUの命令の実行順をかえる命令をうまく用いればよい。その詳細は、高等学校情報の範囲外なのでここでは述べない。w:計算機科学などを参照。
ここまでで簡単なアルゴリズムについて学んだ。ここからはコンピューターを用いて、実際に課題を解くことで、学習を進める。
まず、前章で述べたような、簡単な探索のアルゴリズムを、コンピュータに対する命令として与えることを考えてみる。 ここで、コンピュータに対する命令が、最終的にはCPUに対する命令(機械語と呼ばれる)に帰着することは常に正しい。 しかし、機械語をそのまま書くことは、複雑な作業になることが多く、より専門的な知識が必要となる。
そのため、機械語をより簡単に扱う方法が研究されて来た。ここでは特に、プログラミング言語を通した手法を用いて、コンピュータに対する処理の表し方を扱っていく。
まず、プログラミング言語の説明を行なう。プログラミング言語とは、本来数値として書かねばならない機械語を、より人間に取って分かりやすい表式で書き換える手法である。最も単純なプログラミング言語は、アセンブリ言語と呼ばれ、ほとんど全てのCPUに対して用いられる。これは、機械語のそれぞれに適切な名前をつけ、それを書き連ねることで、機械語を述べる手法である。もちろん、書かれた名前は何らかの手法で、一意に対応する機械語に置き換えねばならない。このような作業をするソフトウェアを、アセンブラと呼ぶ。 アセンブラは、それぞれのCPUに対して1つずつ存在し、CPUごとに使いわける必要がある。
これは、非常に不便であるので、様々なCPUに対して同一の情報を用いる手法が研究された。現在では、多くのCPUが持っている機能を、人間にとって判かりやすい方法で書く手法が確立されている。 このような手法で用いられる技術を高級言語と呼び、高級言語を対応する機械語に変換するソフトウェアを、コンパイラと呼ぶ。 コンパイラが出力する機械語は、CPUごとに変化させる必要がある。しかし、コンパイラに入力するファイル自体は、それぞれのCPU間で同じものを用いることが出来る場合も多い。
理論的なコンパイラでは、最終的に機械語を出力するということだけが定められており、どのような命令に対してどのような機械語を対応させるかということは、定められていない。そのため、使用者の好みや、歴史的事情などに応じて、様々な高級言語が作成されるに到った。現在主要な言語としては、開発用の言語として、C言語、C++、Javaなどがある。また、数値計算や科学計算の分野では、Fortranが広く用いられている。これらの言語は、非常に機能が豊富であり、コンパイラに対する細かい指示を出すことが出来るが、一方で、初心者にはやや分かりづらく、敬遠される向きがある。
実際には、言語を扱うという観点では、機械語に置き換えるのではなく、読み取った言語の内容をその場で実行するプログラムを作ることもできる。このように実行される高級言語をw:インタプリタ言語と呼び、用いられるプログラムをw:インタプリタと呼ぶ。'インタプリタ'は英単語 interpret '解釈する'から来ている。インタプリタは数が多く、よく用いられている言語も多い。
ここでは、簡単なアルゴリズムを扱う言語として、w:Pythonを扱う。Pythonは、インタプリタ言語の1つで、教育目的で作られた言語に源があるため、使いやすく、簡単であることが特徴としてあげられる。Pythonの詳細についてはw:Pythonなどを参照。また、インタプリタ言語には、古くからあるw:Perlや、日本人が作者であり、近年特に注目を集めているRubyなどがある。興味があれば、これらについても調べてみるとよいだろう。
ここでは、前章で述べた線形サーチに対するプログラムを考える。そのためには、Python言語を用いて、実行する手順について、簡単にまとめる必要がある。ここでは、サーチするデータを5つの整数とする。必要な手法は次の通りである。
などがある。これらについて、順番に扱う。
値をコンピュータ上に記憶する操作を、w:代入と呼ぶ。代入はほとんどあらゆる言語が提供する機能であり、機械語を用いても、それらの操作を行なうことが出来る。Pythonでは、代入を、
の構文によって行なう。ここで、aは、値が代入される記憶領域であり('変数'と呼ばれる)、bは、aに代入される値である。aは、単に記憶領域を区別するためだけに付けられた名称であるので、どのような名前を用いてもよい。ただし、実際には覚えた情報の意味を表わすような名前を付けた方が、プログラムの意味がより明白になる事が多い。
次に、2つの数値が等しいかどうかを調べる方法について述べる。Pythonでは、この操作は、
と書かれる。a, bは、それぞれ変数でも定数であってもよい。aとbが等しいときには、この式は、特別な値Trueを返す。一方、aとbが異なる時には、特別な値Falseを返す。ここで得た値は、上の式の結果によって、行なう行動を変えるときに、用いられる。このような操作のことを'条件分岐'と呼ぶ。実際にある条件を課して、その結果に応じて異なった手順を実行するには、
という構文を用いる。ここで、aは、条件として用いる式であり、bは、条件が満たされたときに実行される文である。より複雑な条件分岐も存在するが、ここでは扱わない。 ここで、これはPythonだけの特徴だが、bが2行以上にわたるときには、それらの前の空欄をそろえて書く必要がある。つまり、
とするのである。ここで、b, c, dは、異なった文である。これは、でき上がったプログラムを読みやすくする上でも重要な特徴である。
次に数値を並べておく方法について述べる。コンピューター・プログラミングにおいては、情報を記録する部分は通常w:メモリと呼ばれる。これは、コンピューターのパーツとしてのw:メモリと同じものであることもあるし、違うものであることもある。これは、現在のコンピューターが非常に多くのメモリを必要とするため、物理的なメモリ以外の記憶装置を用いて、物理的なメモリの代わりをさせるからである。
ここでは、それらを区別しないで、単にメモリと呼ぶ。メモリにはそれぞれの位置に番地が置かれており、それらの番地が続くようにデータを置くことで、それらが続いたデータとして、用いることが出来る。一方、このようなデータの置き方にはいくつかの欠点があり、より一般的なデータの置き方が必要となることもある。pythonでは、いくつかのデータを扱うときには、通常後者のより一般的な配置を用いている。しかし、実際のデータの配置は、自動的になされるので、利用者がそれを意識する事はない。実際にpythonで複数のデータを扱う時には、
などのような表式を用いる。ただし、a, b, cは、記憶したい情報の事で、ここでは、整数である。このような表式をw:リストと呼ぶ。これらの表式は、1つの変数に代入することが出来る。lという変数に代入するときには、
のように書く。リストに含まれるそれぞれの情報を扱うには、
という式を用いる。ここで、iは整数で、情報が置かれている場所を表わす。ただし、これらの場所は、0から数える必要がある。0から数えるのは不思議に思えるが、多くのプログラミング言語でそうなっている。例えば、この場合では、
は、aに等しい。
次に、並べたデータを順に見ていく手法を述べる。プログラムの働きを考えると、これは単に、データの数だけ比較をくり返し、それが終わったら全体を終わりにすればよい。 重要なのは、データの数をあらかじめ与えておく事だけである。pythonでは、このようなくり返しは、
を用いてなされる。whileは、aがTrueの間、bの内容をくり返すという文である。aの値が常にTrueである時には、この文はbを無限回くり返すという意味になってしまう。そのため、bにおいて、aの内容を変化させるような書き方をすることが、基本的な手法となる。
最後に結果の出力を行なう方法について述べる。 結果の出力を行なうためには、結果を画面に映し出すような手法が必要である。 pythonにもそのような関数が備わっており、
とすればよい。ここでは、aは何らかの式である。
これらをまとめたプログラムに移る前に、やや高度な内容だが、プログラムの途中でそれ以降の処理を取り止める関数を導入する。この関数は、
の形で書かれる。ただし、この関数は、関数を用いる前に、
という文を書く必要がある。これは、import文と呼ばれる文だが、これについては詳しく説明しない。pythonなどを参照。
これらの結果を用いて、プログラムを書けばよい。与えられたデータが、
であり、探しているデータが2であったとすれば、
となる。先頭の数字は解説のためにつけたもので、実際のプログラムには現われない。
ここからはプログラムを順に見ていく。 1行目は、先ほど述べたimport文であるが、この文については詳しく扱わない。 2行目は、[1, ..., 5]で与えられるリストを、変数dataに代入 している。 3行目では、探している変数をlooking_for_this という変数に代入している。 4行目では、iというくり返しの条件に用いる変数に0を代入している。この値は、後にdataの数だけくり返しを行なうために必要となる。この数は、dataに代入されたリスト内の要素の数と、一致しなくてはいけない。実際には、変数data自身から、data内に含まれる要素の数を取得することも出来る。しかし、それが出来るかどうかは言語や、用いている環境による場合もあるので、ここでは考えない。 5行目が、くり返しの始まりである。この時条件文の中身は、iが0であることから、
となっており、0が5より小さいかどうかを調べている。これは'真'であるので、while内の文が実行される。そのことによって6行目が実行されるが、ここでは、if文を用いて、dataのi番目の要素が、探している量であるlooking_for_thisと等しいかどうかを調べている。ここでは、iが0の時には、data[0]が1であり、looking_for_thisが2であり、条件式は
となるが、これは1と2が等しいかどうかを調べている。これは'偽'であるので、if文の中身は実行されない。そのため、プログラムの実行は次に11行目へと移る。11行目の文は奇異に見えるかも知れないが、=が等しいことを表わす演算子ではなく、代入を表わす演算子であることを考える必要がある。更に、加法の演算子の優先度が、代入の演算子より高いことを考えると、11行目は、'変数iに、現在の変数iの値に1を足したものを代入せよ'という命令となる。結局、iの値に1を加えることに対応する。while文の範囲はここまでであるので、次に文の実行は、5行目に戻る。
ここで、再び、i < 5の比較を行なう。ここでは、さっきと違ってiは1であるが、依然としてiが5より小さいことは変わらないので、再びwhile文の中身が実行される。ここで、iが5になればこの条件式が'偽'となることから、このくり返しは、iが0,1,2,3,4の5回だけ実行されることが分かる。この5回は、リストに貯えた情報の数と一致しているため、ちょうど全ての情報を調べることができるのである。iが1の場合はdata[i]は4であるので、これも求める数ではない。再び、iが1だけ増える手順をくり返すのだが、iが3になったとき、
が'真'になる。ただし、要素の番号は0から数えることに注意。data[3]が2であり、data[4]が5である。このとき、7から10行目のif文の中身が実行される。7行目はprint文であり、書かれた内容を出力する。8行目も、print文だが、今度は、iの中に貯えられている値を出力する。ここで、print文の後に書かれている語の性質によって、print文の動作が変化していることに注意。実際にはこのために複雑な処理をしているが、それについては詳しく述べない。 9行目もprint文だが、これは文末のピリオドをつけるだけである。 10行目のexitは、プログラムの実行を停止する関数であるので、ここでプログラムの実行は止まる。結局探していたデータがdata[3]に保存されていたことがわかったわけである。
ここまでが、最も簡単な探索である線形探索の手順である。探索ではw:2分探索なども有名であるが、ここではそれについてはふれない。w:計算機科学などを参照。

この章では、コンピューターを用いて、簡単なプログラムを作ることを目的とする。その際、対象の性質に注目し、それらをコンピューターに解決させる方法を考え出すことを、主要な目的とする。
この章には、'モデル化とシミュレーション'と、'情報の蓄積・管理とデータベースの活用'の2つの内容が存在する。どちらも実習を含む内容となっているが、実際には両方の実習を行なう必要はなく、情況に応じて、片方を選択すればよい。ただし、基本的な考えは、両方の分野について学習を行なうものとする。
ここでは、いくつかの簡単なプログラムを作成してみる。例として、;1から12までの数値を与えたとき、対応する月の英語名を返すプログラムを作成する。ここでは引き続きpythonを用いるが、他の手法を用いてもよいものとする。
ある数値に対応して、月の名前を得るようなデータは、上で述べたリストを用いると、
などとして表現することが出来る。これは、lの1番目や2番目に対して個別に代入を行なっていることに対応する。ただし、実際にはこのような作業はより簡単に、
のように書くことが出来る。このような簡略化された書き方が出来るかどうかは、インタプリタの性質によっており、様々な言語が作成される原因ともなっている。
次に、与えられた数値に対して対応する文字列を得るには、
とすればよい。ただし、iは対応する数値とする。後は、iを与える方法を指定すればよい。単にiをプログラム中で指定するようにするなら、単に代入を行なえばよい。
ただし、nは、1から12の整数である。
これらをまとめると、最終的に求めるプログラムは次のようになる。
ただし、ここでは求めたい月の名前が、2月の名前であるものとした。求めたい月の整数を、プログラムの外部から与える方法は、ここでは扱わない。
ここでは、データベースソフトウェアの活用について述べる。データベースソフトウェアは、情報を蓄積し、それを必要な時に取りだすことを、専門に行なうソフトウェアである。データベースソフトウェアは、いくつかの重要な用件を満たさなくてはならない。これらの特性は'ACID特性'と呼ばれ、データベースの性質を議論する上で有用となる。しかし、これらの性質はやや複雑なので、ここでは詳しくは述べない。詳細は、ACID特性を参照。
データベースソフトウェアはその性質上、主にデータを貯えることだけを専門にしており、単独では、複雑なことは出来ないのが普通である。そのため、データベースから取りだしたデータを加工するために、上で用いたpythonのような言語が技術として用いられるので ある。この性質上、データベースソフトは'データを保存したり、取りだしたりことを専門に行なう部分'と、'データを受け取り、加工し易いようにする'の2つの部分に分割されることが多い。一般に、これらの機能を持ったプログラムは別々に作成され、お互いの間で通信を行なうことで、目的を達するような設計となることが普通である。このようなソフトウェアを、一般にサーバクライアント型と呼ぶ。 ここでは、データの管理を行なう部分がサーバであり、データを利用者に与える部分が、クライアントである。サーバは英単語server、 クライアントは英単語clientから来ている。
データベースソフトウェアは、種類によってそのデータの保存の仕方や、扱い方が異なっているのが普通である。しかし、これらの扱い方が、少なくとも利用者の視点からは、全く同じに見える方が望ましい。なぜなら、もしそうであるなら、あるデータベースのために作成した利用者のソフトウェアが、他のデータベースに対しても用いることが出来るからである。一般に、各々のソフトウェアの間で、プログラムを共有できる性質を、互換性と呼ぶ。このとき、データベースの利用者側のソフトウェアは、各々のデータベースソフトウェア間で互換性があることが望ましい。
このような互換性は実際に存在し、利用者がデータを受け取るために用いるプログラムは標準化されている。ただし、利用者のプログラムを解釈するソフトウェアや、解釈したソフトウェアがサーバ部分と通信する方法は、標準化されておらず、高価で優れたソフトウェアは通信の安定性や速度などがよりよく考慮されており、差別化が行なわれている。
実際に、データベースを用いるために利用者が用いる言語は、SQLと呼ばれる。SQLは、Structured Query Language の略で、日本語では'構造化問い合わせ言語'と訳される。SQLの文法は、英語の文法に近く、修得は比較的簡単であるとされている。ただし、この言語を一般のアルゴリズムを作成するために用いることは困難であり、あくまで、データベースに要求を伝えるためだけに作られた言語であることには注意する必要がある。一般にSQLは、w:リレーショナルデータベースを用いるための言語である。リレーショナルデータベースとは、データとデータの関係を表の形で表わし、その表を用いて、データを蓄積する手法である。
この手法は直観的にわかりやすいため、現在のデータベースソフトウェアの構成法として広く用いられている。
ここでは、SQLを用いて、簡単なデータベースを作成してみる。ここでは、標準的な内容しか扱わないので、用いるデータベースはどのようなものでも構わないが、オープンソースソフトウェアとしてはMySQLやPostgreSQLが有名である。
ここでは、データベースソフトウェアが既に起動し、SQLを用いることで、データの出し入れが出来る状態が整っているものとする。詳しい導入は付録を参照。
データベースで非常に重要なことは、表を適切な形に定義することである。一度定義した表の情報は変更できるが、やや手順が面倒なので、最初に定義するときには気を付けて定義を行なうことが望ましい。
テーブルを定義するSQLは、
が基本である。ここで、nameは、表の名前であり、elementは、それぞれの要素の名前である。typeは、それぞれのデータの型を表わしている。型とは、それぞれのデータがどのようなものであるかを表わす量であり、整数型、文字型などがある。ここではこの2つしか用いない。
ここでは、商品番号と商品名のみからなる、簡単な表を考える。このとき、表を作成するSQLは、
となる。ここで、INTEGERは、英語で'整数'という意味であり、CHARは、character'文字'の略である。numとnameは、それぞれ商品の番号と、商品名を表わす量である。
ここでは用いないが、作成した表を消去するには、
というSQLが対応する。
実際に作成した表に、データを挿入するには、
が用いられる。ここで、insert'挿入する'である。 ここでは、この文を3回用いて3つのデータを挿入する。
これで、goodsという名の表には3つのデータが挿入された。ここまででデータの作成は終了である。一方、実際のデータベースの運用ではデータの挿入と読み出しが自由な順でなされるのが普通であることは注意が必要である。
作成したデータを読みだすには、SELECTという命令を用いる。SELECTの用い方は複雑であるが、ここでは最も簡単な用い方だけを導入する。nameという名の表から、elem1, elem2, ... などのデータを取りだしたいときには、
というSQLを用いる。ただし、全ての情報を読みだしたいときには、elem1 , ... を*に書き換えた文を用いる。例えば、上の例では、
というSQLは、3つの商品名を返す。また、
というSQLは、それぞれの商品の、商品番号と商品名を、組にして取りだすために用いられる。ただし、SELECTは、情報を取りだす働きがあるが、取りだされたデータが消える事はなく、単に情報が複製されることには注意が必要である。
SELECTには、更にWHEREや、ORDER BYを用いた表式があるので、ここで説明する。 WHEREは、
の形で用いられる。ここで、条件式とは、それぞれの要素に関して正しいか間違いであるかが定まる量のことであり、条件式が正しい('真である'という)時に、対応するデータを取りだし、条件式が正しくない('偽である'という)時には、データを取りださない。条件式の性質は詳しくは扱わないが、加法や減法なども用いることが出来る。例えば、
は、'菓子パン'を返す。また、
は、'サンドイッチ'を返す。最後にORDER BYは、
の形で用いられ、読みだされたデータの並べ換えをさせる効果がある。例えば、
は、numが小さい順にデータを表示する。一方、numが大きい順に表示させたい時には、
とDESCをつけてSQLを作成する必要がある。
ここまでで簡単なSQLを扱って来た。実際のデータベースを用いたプログラムでは、取りだした情報を別の言語を用いて、加工することが普通である。データベースとの接続の詳細は、複雑なのでここでは触れない。
情報化社会では、社会の構成員は大量の情報を処理することを日常的に行なう必要があるのだが、これは、それぞれの人間にとって負担の大きいことである。幸い、人間に取ってより扱いやすい形に情報を加工する手段についても研究が進んでおり、それらを用いることで、情報をより直観的で解りやすい手段で扱うことが出来る。この章では、そのような手法の説明と、それらを用いる際の注意点についてまとめる。
情報技術の発展は、様々な機器を用いて、人間の意思をコンピュータに伝達することを可能にして来た。古いコンピュータでは、情報を伝達する手段として、紙に穴をあけて0と1を表現する機具(パンチカード)を用いて、コンピュータへの情報伝達を行なっていた。
現在ではキーボードやマウスなどを用いて、情報を伝達することが出来る。また、例えば銀行のキャッシュディスペンサーなどでは、パネルに触れる事で、情報をコンピュータに伝えることが出来、利用者に取って非常に親切なシステムとなっている。これらの機器では、機器が読み取った入力を、その情報を元に、実際の制御を行なうコンピュータへと、情報を伝達する手段が問題となる。
実際には同様の問題は、あらゆるコンピュータの周辺機器に対して生じる。多くの計測機器、例えばキーボードは、受け取った情報をケーブルを用いて、電気的にCPUに送っている。信号を受け取ったCPUは、その信号に対して、所定の動作を行ない、その信号を受けいれるのである。このように、機器が信号を発してからそれに対応してそれを扱うCPUが動作する一連の動きを、割り込み、もしくは'ハードウェア割り込み'と呼ぶことがある。ここで、所定の動作とは計測機器とCPUの間の約束事として定めておく必要がある約束事であり、具体的には0と1をどのような仕方でくり返すか、などの情報である。
実際には、信号に対するCPUの動きは単純でない場合も多い。例えば、キーボードとCPUの通信の場合には、押されたキーによって異なった信号が送られて来るため、それぞれの信号と実際に受けいれる情報、例えば画面に表示される文字との間の対応を取る必要がある。また、CPUとハードディスクが情報の交換を行なうときには、ある一定程度の通信が行なわれることを確認してから、実際の書きこみや読み取りを行なうことが 多い。これは、情報交換の過程が時間のかかるものであるため、一度にいくらかの量をまとめて行なう方が都合がよいからである。このように、CPUと周辺機器との情報交換を行なう過程は複雑であるため、この作業を専門に行なうプログラムを作成し、機器への出力や、機器からの入力を整形させる場合が多い。特に、それがOSの機能として与えられるとき、そのようなプログラムをデバイスドライバと呼ぶことがある。
このように複雑な入力機器を用いるためには、ハードウェアとソフトウェアの両面で、多くの努力が必要となることがわかる。ここでは最も単純な入力を用いて、コンピュータによる制御の例を作成してみる。入出力をどのように扱うかはプログラミング言語によって異なっており、それらは言語の1つの特徴となる。解りやすい入出力があれば、言語は使い勝手のよいものとなる。pythonでは、最も簡単な入力は、raw_input() という関数で与えられる。これは、
の形で用いられ、キーボードから入力された文字列を、sに代入する働きをする。これを用いて、簡単なコマンド指定のためのプログラムを作ってみる。例えば、あるプログラムで実行したいことが複数あり、その中から利用者がどの作業を実際に行ないたいかを選ぶ必要があるとする。ここでは、それぞれの作業に1,2,3の番号をつける。このうちのどれを選択したいかを利用者に選択させることが、ここでの目的である。
ここでは、利用者の選択が、'1','2','3'のどれかであることを調べればよい。このような条件分岐は、以前出て来たif文に加えてelif文と、else文を用いる。これらの文は、
の構文に従う。ここで、a, c は条件式であり、b, d, e は、それぞれ1つの文である。この文の意味は、やや複雑である。まずaが真であるかを調べ、真であったらbの文を実行する。そうでなかったときには、次にcが真であるかを調べ、真であったときにはdの文を実行する。それも偽であったときには、eの文の実行をするという手順になる。ここで、aの式が真であったときには、dとeの文は実行されないことに注意が必要である。実際には、elif文は必要に応じていくつでも連ねることが出来る。さらに、else文は省略しても構わない。
これを用いて、1, 2, 3 のどれかを選ぶためのプログラムを作ることが出来る。情報の入力部分は次のようになる。
これはraw_input()を用いて情報を受け取るための文である。ただし、print文を1つつけて、何が求められているかを解りやすくした。受け取った情報から必要な作業がどれであるかを見出す部分は次のようになる。
プログラム中で、sは、先ほど受け取った利用者からの入力である。これが'1', '2', '3'のどれかであるかを確かめるために、先ほどのif - elif - else を用いている。それぞれのif文に対応する実行文は、ここでは、単に番号を表示するprint文である。しかし、実際により複雑な仕事を行なうときには、この部分に対応するサブルーチンをおいた方がよいだろう。Pythonでもサブルーチンを定義することが出来るが、ここではそれに関する説明は行なわない。w:Pythonなどを参照。また、利用者が入力した内容が1, 2, 3 のどれでもないときには、その内容に対応する作業が無いことを述べて、プログラムの実行を終えている。
情報技術を上手く用いることで、情報を処理することに関する人間の負担を減らすことが出来る。同時に、そのような技術を上手く用いることで、人間が行なう処理の間違いを検出したり、より使いやすい入力装置を作成することが出来る。
しかし、このようなプログラムを作成するには多くの時間が必要であり、価格として高価になる場合が多い。そのため、実際にどの程度の使い易さを要求するかは、プログラムの作成の段階で問題になることが多い。実際には要求を増やすほど、作成の時間もコストも増える傾向があるため、常に優れた情報技術が用いられるとは限らないことにも注意する必要がある。しかし、ヒューマンエラーの発生を減らすためにも、使い方が明快で解りやすい情報技術の作成は重要な役割を持つ。この分野については今後の発展が期待されるところである。
現在ではハードウェアの面でも、ソフトウェアの面でも非常に多くの情報技術が開発されており、その数は現在でも増え続けている。これらは使いこなすことで我々の生活が便利になる可能性を秘めている一方、使い方を間違えば、我々の生活を大変な混乱に導く可能性も秘めている。実際的には、我々はコンピュータ技術の発展に常に注目し、それらを用いて実行できることを把握しておくことが望まれる。
Pythonは、よく知られたオープンソースソフトウェアであり、多くの環境で無料で用いることが出来る。ただし、無料であることの代償として、ソフトウェアのバグなどによって引き起こされたいかなる損害に対しても、作成者は責任を負わないことが明記されている。実際には、Pythonは非常に安定しており、そのような結果が引き起こされる確率は高くはないが、常に自身に責任があることには注意する必要がある。
Pythonは、Linux、Mac OS Xなどでは配布者によってインストールされていることが多い。このような環境を用いているときには、コマンド
を試してみるとよい。このとき既にインストールが行なわれているなら、pythonのバージョンが表示されるはずである。一方、インストールされていないときには'そのようなプログラムは存在しない'という文章が表示されるはずである。正確な文字列は環境による。この様な場合には、これらをインストールする手順が必要になる。詳しくは、などを参照すること。
Windowsを用いているときにも、いくつかの方法でPythonを導入することが出来る。ActivePython、Cygwinなどを参照。また、マイクロソフト純正のプログラムツールとして、IronPythonが、現在開発中のようである。