「高等学校情報B」の版間の差分

削除された内容 追加された内容
M 見出しの間違いを削除しました。
M リダイレクト回避とリンクの中で不要な Wikipedia のプリフィックスを隠そうとしたけどあまりの多さに途中で挫折 & 赤リンクつぶし (Wikipedia へのリンクに修正)
3 行
<small> [[情報技術]] > [[高等学校情報B]] </small>
----
== 情報B ==
=== 問題解決とコンピュータの活用 ===
 
 
 
 
===問題解決とコンピュータの活用===
<!--
問題解決における手順とコンピュータの活用問題解決においては,解決の手順と用いる手段の違いが結果に影響を与えること及びコンピュータの適切な活用が有効であることを理解させる。
 
-->
 
[[高等学校情報A]]では基本的なコンピューターの使い方を学んだ。情報Bでは、より複雑なコンピューターの使用法を学ぶ。
 
24 ⟶ 20行目:
そのため、コンピュータに命令を与える時には、実行したい命令を正しい順番で与えることが重要である。
 
==== コンピュータによる情報処理の特徴 ====
<!--
コンピュータを適切に活用する上で知っておくべきコンピュータによる情報処理の長所と短所を理解させる。
 
-->
 
コンピュータでは様々な仕事をすることが出来る。しかし、全ての仕事がコンピュータに取って向いているわけではなく、中には、コンピュータに向いていない仕事もある。
 
34 ⟶ 30行目:
 
一方、コンピュータは"考える"ことができないため、新しい事柄を考え出すことは出来ない。また、コンピュータは映像や音楽を扱うことが出来るが、人間のように、映像や音楽に関するおおまかな雰囲気を伝えることは不得手である。しかし、技術の発展によって、よりあいまいな情報を扱うこともなされるようになって来ており、これらの分野はこれからの発展が待たれるところである。
 
<!--
この指導要領が定められた時と比べて、いろいろなことが変わって来てしまって
41 ⟶ 36行目:
-->
 
=== コンピュータの仕組みと働き ===
==== コンピュータにおける情報の表し方 ====
 
====コンピュータにおける情報の表し方====
<!--
文字,数値,画像,音などの情報をコンピュータ上で表す方法についての基本的な考え方及び情報のディジタル化の特性を理解させる。
-->
 
-->
ここまでで何度かコンピュータが多様な情報を扱うことが出来ることを述べて来た。同時に、コンピュータは0と1で表わされる情報しか扱うことが出来ないことも述べて来た。このため、文字や数値などの情報を、コンピュータを用いて扱う方法が存在することは非常に不思議に思える。
 
ここでは、コンピュータを用いて文字や数値や映像などの情報を扱う方法についてまとめる。まず、数値について考える。コンピュータは0と1しか扱うことができない。しかし、0と1だけを用いてもそれらを複数並べることで、より大きな数を表わすことが出来る。実際に、0と1以外の数値を用いるためには、2つ以上の数値を用いることが必要となる。このような数値の数え方を、数学的には[[w:二進法|2進数]]と呼ぶ。2進数についての詳しい説明は[[高等学校情報C]]の範囲である。2進数を用いるときには、10進数を用いるときと同様に、1の位が2進数の最大の数である1となった時に、更に1を加えるときには、桁上りが起こる。例えば、0の次は1であるが、1の次は、1の位が1であるため桁上りが起こり、次の数は10である。これはジュウではなく、イチゼロと読む。ここで、次の数は11であり、更に次の数は100である。このような手法を用いて、非常に大きい数も表わすことができる。2進数で表わされた数と、10進数で表わされた数の一般的な対応は、[[高等学校情報C]]の範囲である。
 
ここまでは整数について考えて来た。一方、数値には小数で現われる数もある。これらは、コンピュータ上では常に有限の桁数を持った数値として表わされる。これは、コンピュータの記憶量が常に有限であるので、無限個の数で表わされる数値を扱うことは出来ないことによる。具体的には小数を、
 
:<math>
a \times c ^b
</math>
 
の形に書き表す事が多い。ここで、aは、0から1までの有限の桁数の小数であり、bは、定まった定数であり、cは、元々の数の大きさを表わす数である。このとき、aを'仮数'、bを'指数'と呼ぶ。例えば、cを10とし、元々の数を5.24とすると、
 
:<math>
5.24 = 0.524 \times 10 ^{-1}
</math>
 
となるので、仮数は524、指数は-1となる。これによって、上で述べた整数を扱う方法を用いて、小数を扱うことが出来るのである。
 
65 ⟶ 63行目:
 
仮にこのような当てはめがなされて、しかも、コンピュータに取って与えられた情報が文字であることが知らされていたなら、コンピュータはその情報を文字として扱うことが出来る。それぞれの文字にどのような数値があてはめられているかは、環境によって異なる。しかし、英語で用いられるアルファベットなどの基本的な文字については、これらは
ほぼ統一されている。一方、日本語の文字に対する数値は、環境によっており、統一されているとはいえないのが現状である。これらの異なった数値は、[[w:文字化け|文字化け]]の原因となる。
 
文字化けの問題の解決策として様々な数値の当てはめ方の間を、移りかえる手法が必要となる。実際にどのような数値が当てはめられているかを調べる方法は、高等学校情報の範囲を超えるので、ここでは述べない。
76 ⟶ 74行目:
 
各々の点に対する数値の上限は、各々の点に対する色数が何通りあるかを表わす数であり、この数が大きいほど、多くの色を作ることが出来、より元の映像に近い色彩で、映像を保存することが出来る。よく用いられる上限は、それぞれの赤緑青の色に対して256通りの色を与える手法であり、この時には合計で
 
:<math>
256 ^ 3 =16777216
</math>
 
だけの種類の色が出せることに対応する。[[w:TrueColor]]も参照。
だけの種類の色が出せることに対応する。[[w:TrueColor|TrueColor]]も参照。
 
最後に、音に関する情報の扱い方について述べる。
 
[[w:音|音]]は、空気などの振動であり、音が聞こえている点での圧力の違いによって、音を表わすことが出来る。詳しくは、[[高等学校理科 物理I]]を参照。[[w:マイクロフォン|マイクロフォン]]は、圧力の違いによって現われる波形を、電気的な波形に変換する機具であり、これを用いることで、音を、電気的な波形とすることが出来る。
 
このような波形は、そのままでは数値として扱うことは出来ないが、非常に短い時間間隔でそれらの波形の大きさを記録することで、元々の波形にごく近い波形を、数値情報として取りだすことが出来る。ただし、記録を行なう時間間隔と比べて、非常に速く変化する
波形については、正しく波形を再現することは出来ない。
<!--
[[w:サンプリング定理|]]を参照。
-->
 
==== コンピュータにおける情報の処理 ====
<!--
コンピュータの仕組み,コンピュータ内部での基本的な処理の仕組み及び簡単なアルゴリズムを理解させる。
-->
 
-->
ここまでにもコンピュータが与えられた命令を順に実行していくことを述べた。ここでは、コンピュータが具体的にどのようにこれらの命令を実行するかを述べる。
 
コンピュータは[[w:CPU]]を含んでいるが、コンピュータが実行する命令は、全てCPUによって実行される。そのため、コンピュータに対する命令は、CPUの動作を制御することが目的となる。具体的には、CPUは、あるデジタルデータによって表わされる命令を受けつけて、それに対応する命令を実行するように作られている。このため、適切なデータをCPUに与えることで、CPUを思い通りに動かすことができるのである。詳細については[[w:CPU]]、[[w:機械語]]などを参照。
 
このとき、コンピュータを扱う人間は、CPUがどのような命令に対して、どのような動作を行なうかを、把握していなくてはならないように見える。ただし、実際には、そのような命令を出す作業自体を、コンピュータに代行させることができるため、コンピュータの利用者全てが、そのような命令を把握していなくてはいけないというわけではない。実際[[w:キーボード (コンピュータ)|キーボード]]、[[w:マウス (コンピュータ)|マウス]]などを用いてコンピュータに指示を与えることができるが、それらが具体的にどのような命令に対応するかは、コンピュータの構成、特に[[w:オペレーティングシステム|OS]]の機能によって異なる。
 
ここで、コンピュータのこの性質を用いて、コンピュータに行なわせることが出来る仕事を、具体的に述べる。
 
コンピュータが行なうことが出来る仕事として、古くから知られているものに、'並べ替え'と'探索'がある。並べ換えとは、ある条件に基づいて、与えられたデータの順番を並べかえる操作のことであり、探索とは、与えられたデータの中から、対応するデータを探しだす操作のことである。このように、コンピュータを用いて行なう作業のことを、[[w:アルゴリズム|アルゴリズム]]と呼ぶことがある。より高度なアルゴリズムについては[[w:計算機科学]]などを参照。
 
まずは、探索について述べる。ここでは[[w:線形探索|線形探索]]と呼ばれる手法について述べる。線形探索とは、複数のデータが与えられたときに、それらを順番に探しているデータと比較し、それと等しいデータを探すという探索法である。探しているデータが見つかったときには、見つかったという情報を返し、探しているデータと等しいものが無いときには、探索が失敗したという情報を与える。具体的にコンピュータに探索を行なわせる手法を述べる。
 
探索されるデータ群と、探すデータの種類は、CPUに与えることができるものとする。具体的な探索手順は次のようになる。
 
;1 データ群から、最初のデータを取る。
;2# データ群から、最初のデータを取る。
# 取ったデータと、探していたデータを比較する。等しいときには、4に進む。
;3# データ群から新しいデータを取り、2に戻る。新しいデータが無いなら、5に進む。
;4# 得られたデータが、探していたデータである。
;5# 探していたデータは与えられたデータ群には無いことがわかる。
 
ここで、コンピュータの命令は、基本的には与えられた順に行なわれるが、CPUに対するある命令は、命令が実行される順番を変化させることを注意しておく。上の例では2の中で、'4に進む'という手順があるが、これは、コンピュータの命令が、常に与えられた順になされるのなら、不可能である。
119 ⟶ 120行目:
次に、並び換えについて述べる。ここでは、[[w:選択ソート]]と呼ばれるアルゴリズムについて述べる。選択ソートとは、与えられたデータの中から最も大きいものを順番に見ていくことで探しだして、それを最初に持って来て、残ったものの中で同じ事をくり返すという方法である。小さい順に並べるには、これをデータの中から最も小さいものを取りだすという手順に入れ換えて、行なえばよい。選択ソートはデータの数が多いときには非効率であることが知られている。
 
より高速なソートについては、[[w:計算機科学]]、[[w:クイックソート]]などを参照。
具体的な手順は、
 
;1 データの中で最も大きいものを探しだす。
;2# データの中で最も大きいものを探しだす。
# 探しだした最も大きいデータを取りだして、答えの列の最初に並べる。
;3# 残ったものに対して、同じ手順をくり返す。
 
というようになる。これは単純に見えるが、複数のデータの中から
というようになる。これは単純に見えるが、複数のデータの中から最大のものを探しだすことは、通常CPUの命令としては存在しない。そのため、このような手法も、CPUに対する命令として、作成しなくてはならない。具体的には、次の手順となる
 
そのため、このような手法も、CPUに対する命令として、作成しなくては
# 与えられたデータ群のうちの1つ分を記憶できる場所を、確保しておく。
ならない。具体的には、次の手順となる。
;1# 与えられたデータ群のうちの中から1つ分を記憶できる場所取りだし1で確保しておくた場所に記憶する
;2# 与えられたデータ群の中から1つのデータを取りだす。取りだすデータが無くなれば1で確保した場所5記憶する進む
;3# 3で取りだしたデータ群から1つのと記憶しておいたデータを取りだ比較る。記憶しておいたデータの方が大きければ、3へ戻る。取りだしたデータの方無くな大きければ、5取り出したデータを確保しておいた場所に上書きし、3進む戻る
# 1で確保した場所に記憶されているデータが求めるデータである。
;4 3で取りだしたデータと記憶しておいたデータを比較する。記憶しておいたデータの方が大きければ、3へ戻る。取りだしたデータの方が大きければ、取り出したデータを確保しておいた場所に上書きし、3に戻る。
 
;5 1で確保した場所に記憶されているデータが求めるデータである。
これらを適切な情況で呼び出せばよい。このように、ある汎用的に用いられる命令群を作成して、適宜呼び出して用いることが出来るとき、この命令群のことを[[w:サブルーチン|サブルーチン]](副命令)と呼ぶことがある。サブルーチンを呼び出すには、CPUの命令の実行順をかえる命令をうまく用いればよい。その詳細は、高等学校情報の範囲外なのでここでは述べない。[[w:計算機科学]]などを参照。
これらを適切な情況で呼び出せばよい。このように、ある汎用的に
用いられる命令群を作成して、適宜呼び出して用いることが出来るとき、
この命令群のことを[[w:サブルーチン]](副命令)と呼ぶことがある。
サブルーチンを呼び出すには、CPUの命令の実行順をかえる命令をうまく
用いればよい。その詳細は、高等学校情報の範囲外なのでここでは述べない。
[[計算機科学]]などを参照。
<!--
D. Knuth The art of programming 1. などを参照。
-->
 
==== 情報の表し方と処理手順の工夫の必要性 ====
<!--
コンピュータを活用して情報の処理を行うためには,情報の表し方と処理手順の工夫が必要であることを理解させる。
-->
-->
ここまでで簡単なアルゴリズムについて学んだ。ここからはコンピューターを用いて、実際に課題を解くことで、学習を進める。
<!--
163 ⟶ 160行目:
... 。
-->
 
そのため、CPUに対する命令をより簡単に扱う方法が研究されて来た。ここでは特に、[[プログラミング]]言語を通した手法を用いて、コンピュータに対する命令を扱っていく。
 
まず、プログラミング言語の説明を行なう。プログラミング言語とは、本来数値として書かねばならないCPUへの命令を、より人間に取って分かりやすい表式で書き換える手法である。最も単純なプログラミング言語は、[[w:アセンブリ言語|アセンブラ言語]]と呼ばれ、ほとんど全てのCPUに対して用いられる。これは、CPUに対する命令のそれぞれに適切な名前をつけ、それを書き連ねることで、CPUに対する命令を述べる手法である。もちろん、書かれた名前は何らかの手法で、CPUに対する対応する命令に置き換えねばならない。このような作業をするソフトウェアを、[[w:アセンブラ|アセンブラ]]と呼ぶ。アセンブラは、それぞれのCPUに対して1つずつ存在し、CPUごとに使いわける必要がある。
 
これは、非常に不便であるので、様々なCPUに対して同一の情報を用いる手法が研究された。現在では、多くのCPUが持っている機能を、人間に取って、分かりやすい方法で書く手法が確立されている。このような手法で用いられる技術を[[w:高級言語|高級言語]]と呼び、高級言語を対応するCPUへの命令([[w:機械語|機械語]]と呼ばれる)に変換するソフトウェアを、[[w:コンパイラ|コンパイラ]]と呼ぶ。コンパイラが出力する機械語は、CPUごとに変化させる必要がある。しかし、コンパイラに入力するファイル自体は、それぞれのCPU間で同じものを用いることが出来る場合も多い。
 
理論的なコンパイラでは、最終的に機械語を出力するということだけが定められており、どのような命令に対してどのような機械語を対応させるかということは、定められていない。そのため、使用者の好みや、歴史的事情などに応じて、様々な高級言語が作成されるに到った。現在主要な言語としては、開発用の言語として、[[C言語]]、[[CPlusPlus|C++]]、[[Java]]などがある。また、数値計算や科学計算の分野では、[[w:Fortran]]が広く用いられている。これらの言語は、非常に機能が豊富であり、コンパイラに対する細かい指示を出すことが出来るが、一方で、初心者にはやや分かりづらく、敬遠される向きがある。
 
実際には、言語を扱うという観点では、機械語に置き換えるのではなく、読み取った言語の内容をその場で実行するプログラムを作ることもできる。このように実行される高級言語を[[w:インタプリタ言語]]と呼び、用いられるプログラムを[[w:インタプリタ]]と呼ぶ。'インタプリタ'は英単語 interpret '解釈する'から来ている。インタプリタは数が多く、よく用いられている言語も多い。
182 ⟶ 180行目:
-->
 
ここでは、簡単なアルゴリズムを扱う言語として、[[w:Python]]を扱う。Pythonは、インタプリタ言語の1つで、教育目的で作られた言語に源があるため、使いやすく、簡単であることが特徴としてあげられる。Pythonの詳細については[[w:Python]]などを参照。また、インタプリタ言語には、古くからある[[w:Perl]]や、日本人が作者であり、近年特に注目を集めている[[w:Ruby|Ruby]]などがある。興味があれば、これらについても調べてみるとよいだろう。
 
ここでは、前章で述べた線形サーチに対するプログラムを考える。そのためには、Python言語を用いて、CPUに対する命令を発する手法について、簡単にまとめる必要がある。ここでは、サーチするデータを5つの整数とする。必要な手法は次の通りである。
 
;値を記憶する。
;* 値を記憶する。
* 2つの数値が等しいかどうか調べる。
;* 数値を並べておいて、順番に取り寄せる。
;* 結果を出力する。
 
などがある。これらについて、順番に扱う。
 
値をコンピュータ上に記憶する操作を、[[w:代入]]と呼ぶ。代入はほとんどあらゆる言語が提供する機能であり、機械語を用いても、それらの操作を行なうことが出来る。Pythonでは、代入を、
 
a = b
 
の構文によって行なう。ここで、aは、値が代入される記憶領域であり('変数'と呼ばれる)、bは、aに代入される値である。aは、単に記憶領域を区別するためだけに付けられた名称であるので、どのような名前を用いてもよい。ただし、実際には覚えた情報の意味を表わすような名前を付けた方が、プログラムの意味がより明白になる事が多い。
 
次に、2つの数値が等しいかどうかを調べる方法について述べる。Pythonでは、この操作は、
 
a == b
 
と書かれる。a, bは、それぞれ変数でも定数であってもよい。aとbが等しいときには、この式は、特別な値Trueを返す。一方、aとbが異なる時には、特別な値Falseを返す。ここで得た値は、上の式の結果によって、行なう行動を変えるときに、用いられる。このような操作のことを'条件分岐'と呼ぶ。実際にある条件を課して、その結果に応じて異なった手順を実行するには、
 
if (a):
b
 
という構文を用いる。ここで、aは、条件として用いる式であり、bは、条件が満たされたときに実行される文である。より複雑な条件分岐も存在するが、ここでは扱わない。
<!--
208 ⟶ 214行目:
のことである。 -->
ここで、これはPythonだけの特徴だが、bが2行以上にわたるときには、それらの前の空欄をそろえて書く必要がある。つまり、
 
if (a):
b
c
d
 
とするのである。ここで、b, c, dは、異なった文である。これは、でき上がったプログラムを読みやすくする上でも重要な特徴である。
 
245 ⟶ 253行目:
の形で書かれる。ただし、この命令は、命令を用いる前に、
from sys import exit
という文を書く必要がある。これは、import文と呼ばれる文だが、これについては詳しく説明しない。[[w:python]]などを参照。
 
これらの結果を用いて、プログラムを書けばよい。与えられたデータが、
282 ⟶ 290行目:
10行目のexitは、プログラムの実行を停止する関数であるので、ここでプログラムの実行は止まる。結局探していたデータがdata[3]に保存されていたことがわかったわけである。
 
ここまでが、最も簡単な探索である線形探索の手順である。探索では[[w:2分探索]]なども有名であるが、ここではそれについてはふれない。[[w:計算機科学]]などを参照。
 
<!--
367 ⟶ 375行目:
重要な用件を満たさなくてはならない。
これらの特性は'ACID特性'と呼ばれ、データベースの性質を議論する上で有用となる。
しかし、これらの性質はやや複雑なので、ここでは詳しくは述べない。詳細は、[[w:ACID特性|ACID特性]]を参照。
 
データベースソフトウェアはその性質上、主にデータを貯えることだけを専門にしており、
385 ⟶ 393行目:
望ましい。なぜなら、もしそうであるなら、あるデータベースのために作成した利用者の
ソフトウェアが、他のデータベースに対しても用いることが出来るからである。
一般に、各々のソフトウェアの間で、プログラムを共有できる性質を、[[w:互換性|互換性]]と呼ぶ。
このとき、データベースの利用者側のソフトウェアは、各々のデータベースソフトウェア間で
互換性があることが望ましい。
393 ⟶ 401行目:
や、解釈したソフトウェアがサーバ部分と通信する方法は、標準化されておらず、高価で優れたソフトウェアは通信の安定性や速度などがよりよく考慮されており、差別化が行なわれている。
 
実際に、データベースを用いるために利用者が用いる言語は、[[w:SQL|SQL]]と呼ばれる。SQLは、Structured Query Language の略で、日本語では'構造化問い合わせ言語'と訳される。SQLの文法は、英語の文法に近く、修得は比較的簡単であるとされている。ただし、この言語を一般のアルゴリズムを作成するために用いることは困難であり、あくまで、データベースに要求を伝えるためだけに作られた言語であることには注意する必要がある。一般にSQLは、[[w:リレーショナルデータベース]]を用いるための言語である。リレーショナルデータベースとは、データとデータの関係を表の形で表わし、その表を用いて、データを蓄積する手法である。
実際に、データベースを用いるために利用者が用いる言語は、[[w:SQL]]
と呼ばれる。SQLは、Structured Query Language の略で、日本語では
'構造化問い合わせ言語'と訳される。SQLの文法は、英語の文法に近く、
修得は比較的簡単であるとされている。ただし、この言語を一般の
アルゴリズムを作成するために用いることは困難であり、あくまで、
データベースに要求を伝えるためだけに作られた言語であることには
注意する必要がある。一般にSQLは、[[w:リレーショナルデータベース]]を
用いるための言語である。リレーショナルデータベースとは、データとデータの
関係を表の形で表わし、その表を用いて、データを蓄積する手法である。
<!--
この文には'直観的には'とつけないと'数学的には'間違い。
定義は数式で与えられる。
-->
この手法は直観的にわかりやすいため、現在のデータベースソフトウェアの
構成法として広く用いられている。
 
この手法は直観的にわかりやすいため、現在のデータベースソフトウェアの構成法として広く用いられている。
 
ここでは、SQLを用いて、簡単なデータベースを作成してみる。ここでは、標準的な内容しか扱わないので、用いるデータベースはどのようなものでも構わないが、オープンソースソフトウェアとしては[[w:MySQL|MySQL]]や[[w:PostgreSQL|PostgreSQL]]が有名である。
ここでは、標準的な内容しか扱わないので、用いるデータベースは
<!-- ANSI標準らしい。調べないと ... 。 -->
どのようなものでも構わないが、オープンソースソフトウェアとしては
[[w:MySQL]]や[[w:PostgreSQL]]が有名である。
 
ここでは、データベースソフトウェアが既に起動し、SQLを用いることで、
426 ⟶ 421行目:
 
テーブルを定義するSQLは、
 
CREATE TABLE name ( element type, element type, ...)
 
が基本である。ここで、nameは、表の名前であり、elementは、
それぞれの要素の名前である。typeは、それぞれのデータの
435 ⟶ 432行目:
ここでは、商品番号と商品名のみからなる、簡単な表を考える。
このとき、表を作成するSQLは、
 
CREATE TABLE goods (num INTEGER, name CHAR (30) )
 
となる。ここで、INTEGERは、英語で'整数'という意味であり、
CHARは、character'文字'の略である。numとnameは、それぞれ商品の番号と、
441 ⟶ 440行目:
 
ここでは用いないが、作成した表を消去するには、
 
DROP TABLE name
 
というSQLが対応する。
 
実際に作成した表に、データを挿入するには、
 
INSERT INTO name VALUES (elem1, elem2, ... )
 
が用いられる。ここで、insert'挿入する'である。
ここでは、この文を3回用いて3つのデータを挿入する。
 
INSERT INTO goods VALUES (1, 'bread')
INSERT INTO goods VALUES (2, 'humburger' )
INSERT INTO goods VALUES (3, 'peanut)
 
これで、goodsという名の表には3つのデータが挿入された。
ここまででデータの作成は終了である。一方、実際のデータベースの運用では
458 ⟶ 463行目:
用い方は複雑であるが、ここでは最も簡単な用い方だけを導入する。
nameという名の表から、elem1, elem2, ... などのデータを取りだしたいときには、
 
SELECT elem1, elem2, ... FROM name
 
というSQLを用いる。ただし、全ての情報を読みだしたいときには、
elem1 , ... を*に書き換えた文を用いる。例えば、上の例では、
 
SELECT name FROM goods
 
というSQLは、3つの商品名を返す。また、
 
SELECT * FROM goods
 
というSQLは、それぞれの商品の、商品番号と商品名を、組にして取りだすために
用いられる。ただし、SELECTは、情報を取りだす働きがあるが、取りだされたデータが
470 ⟶ 481行目:
SELECTには、更にWHEREや、ORDER BYを用いた表式があるので、ここで説明する。
WHEREは、
 
SELECT ... FROM ... WHERE 条件式
 
の形で用いられる。ここで、条件式とは、それぞれの要素に関して正しいか
間違いであるかが定まる量のことであり、条件式が正しい('真である'という)
478 ⟶ 491行目:
SELECT name FROM goods WHERE id = 3
は、'菓子パン'を返す。また、
 
SELECT name FROM goods WHERE id + 1 = 3
 
は、'サンドイッチ'を返す。最後にORDER BYは、
 
SELECT ... FROM ... ORDER BY ...
 
の形で用いられ、読みだされたデータの並べ換えをさせる効果がある。
例えば、
 
SELECT name FROM goods ORDER BY num
 
は、numが小さい順にデータを表示する。一方、numが大きい順に表示させたい時には、
 
SELECT name FROM goods ORDER BY num DESC
 
とDESCをつけてSQLを作成する必要がある。
 
500 ⟶ 521行目:
並記されていた。
-->
 
 
===情報社会を支える情報技術===
 
情報化社会では、社会の構成員は大量の情報を処理することを日常的に行なう必要があるのだが、これは、それぞれの人間にとって負担の大きいことである。幸い、人間に取ってより扱いやすい形に情報を加工する手段についても研究が進んでおり、それらを用いることで、情報をより直観的で解りやすい手段で扱うことが出来る。この章では、そのような手法の説明と、それらを用いる際の注意点についてまとめる。
 
==== 情報通信と計測・制御の技術 ====
<!--
情報通信と計測・制御の仕組み及び社会におけるそれらの技術の活用について理解させる。
-->
 
-->
情報技術の発展は、様々な機器を用いて、人間の意思をコンピュータに伝達することを可能にして来た。古いコンピュータでは、情報を伝達する手段として、紙に穴をあけて0と1を表現する機具([[w:パンチカード]])を用いて、コンピュータへの情報伝達を行なっていた。
情報技術の発展は、様々な機器を用いて、人間の意思をコンピュータに伝達することを可能にして来た。古いコンピュータでは、情報を伝達する手段として、紙に穴をあけて0と1を表現する機具([[w:パンチカード|パンチカード]])を用いて、コンピュータへの情報伝達を行なっていた。
 
現在では[[w:キーボード]][[w:マウス]]などを用いて、情報を伝達することが出来る。また、例えば銀行のキャッシュディスペンサーなどでは、パネルに触れる事で、情報をコンピュータに伝えることが出来、利用者に取って非常に親切なシステムとなっている。これらの機器では、機器が読み取った入力を、その情報を元に、実際の制御を行なうコンピュータへと、情報を伝達する手段が問題となる。
 
実際には同様の問題は、あらゆるコンピュータの周辺機器に対して生じる。多くの計測機器、例えばキーボードは、受け取った情報を[[w:ケーブル|ケーブル]]を用いて、電気的に[[w:CPU]]に送っている。信号を受け取ったCPUは、その信号に対して、所定の動作を行ない、その信号を受けいれるのである。このように、機器が信号を発してからそれに対応してそれを扱うCPUが動作する一連の動きを、[[w:割り込み|割り込み]]、もしくは'ハードウェア割り込み'と呼ぶことがある。ここで、所定の動作とは計測機器とCPUの間の約束事として定めておく必要がある約束事であり、具体的には0と1をどのような仕方でくり返すか、などの情報である。
 
実際には、信号に対するCPUの動きは単純でない場合も多い。例えば、キーボードとCPUの通信の場合には、押されたキーによって異なった信号が送られて来るため、それぞれの信号と実際に受けいれる情報、例えば画面に表示される文字との間の対応を取る必要がある。また、CPUとハードディスクが情報の交換を行なうときには、ある一定程度の通信が行なわれることを確認してから、実際の書きこみや読み取りを行なうことが
多い。これは、情報交換の過程が時間のかかるものであるため、一度にいくらかの量をまとめて行なう方が都合がよいからである。このように、CPUと周辺機器との情報交換を行なう過程は複雑であるため、この作業を専門に行なうプログラムを作成し、機器への出力や、機器からの入力を整形させる場合が多い。特に、それが[[w:OS]]の機能として与えられるとき、そのようなプログラムを[[w:デバイスドライバ|デバイスドライバ]]と呼ぶことがある。
 
このように複雑な入力機器を用いるためには、ハードウェアとソフトウェアの両面で、
524 ⟶ 542行目:
コンピュータによる制御の例を作成してみる。入出力をどのように扱うかはプログラミング言語によって異なっており、それらは言語の1つの特徴となる。解りやすい入出力があれば、言語は使い勝手のよいものと
なる。pythonでは、最も簡単な入力は、raw_input() という関数で与えられる。これは、
 
s = raw_input()
 
の形で用いられ、キーボードから入力された文字列を、sに代入する働きをする。これを用いて、簡単なコマンド指定のためのプログラムを作ってみる。例えば、あるプログラムで実行したいことが複数あり、その中から利用者がどの作業を実際に行ないたいかを選ぶ必要があるとする。ここでは、それぞれの作業に1,2,3の番号をつける。このうちのどれを選択したいかを利用者に選択させることが、ここでの目的である。
 
ここでは、利用者の選択が、'1','2','3'のどれかであることを調べればよい。このような条件分岐は、以前出て来たif文に加えてelif文と、else文を用いる。これらの文は、
 
if (a):
b
534 ⟶ 555行目:
else:
e
 
の構文に従う。ここで、a, c は条件式であり、b, d, e は、それぞれ1つの文である。この文の意味は、やや複雑である。まずaが真であるかを調べ、真であったらbの文を実行する。そうでなかったときには、次にcが真であるかを調べ、真であったときにはdの文を実行する。それも偽であったときには、eの文の実行をするという手順になる。ここで、aの式が真であったときには、dとeの文は実行されないことに注意が必要である。実際には、elif文は必要に応じていくつでも連ねることが出来る。さらに、else文は省略しても構わない。
 
これを用いて、1, 2, 3 のどれかを選ぶためのプログラムを作ることが出来る。情報の入力部分は次のようになる。
 
print "Please give me one of 1, 2, 3."
s = raw_input()
 
これはraw_input()を用いて情報を受け取るための文である。ただし、print文を1つつけて、何が求められているかを解りやすくした。受け取った情報から必要な作業がどれであるかを見出す部分は次のようになる。
 
if (s == '1'):
print "I'll try job 1."
548 ⟶ 573行目:
else:
print "I don't understand what you gave me."
 
プログラム中で、sは、先ほど受け取った利用者からの入力である。これが'1', '2', '3'のどれかであるかを確かめるために、先ほどのif - elif - else を用いている。それぞれのif文に対応する実行文は、ここでは、単に番号を表示するprint文である。しかし、実際により複雑な仕事を行なうときには、この部分に対応するサブルーチンをおいた方がよいだろう。Pythonでもサブルーチンを定義することが出来るが、ここではそれに関する説明は行なわない。[[Python]]などを参照。また、利用者が入力した内容が1, 2, 3 のどれでもないときには、その内容に対応する作業が無いことを述べて、プログラムの実行を終えている。
プログラム中で、sは、先ほど受け取った利用者からの入力である。これが'1', '2', '3'のどれかであるかを確かめるために、先ほどのif - elif - else を用いている。それぞれのif文に対応する実行文は、ここでは、単に番号を表示するprint文である。しかし、実際により複雑な仕事を行なうときには、この部分に対応するサブルーチンをおいた方がよいだろう。Pythonでもサブルーチンを定義することが出来るが、ここではそれに関する説明は行なわない。[[w:Python]]などを参照。また、利用者が入力した内容が1, 2, 3 のどれでもないときには、その内容に対応する作業が無いことを述べて、プログラムの実行を終えている。
<!--しかし、実際には1, 2, 3 が入力されなかった時には、再び入力部分に戻る方が親切であるとも考えられる。このようなプログラムを作ることは実は難しくないが、ここでは行なわない。-->
 
555 ⟶ 581行目:
入力部分と制御部分は分割して考えることができることは確かである。
-->
==== 情報技術における人間への配慮 ====
 
====情報技術における人間への配慮====
<!--
情報技術を導入する際には,安全性や使いやすさを高めるための配慮が必要であることを理解させる。
-->
 
-->
情報技術を上手く用いることで、情報を処理することに関する人間の負担を減らすことが出来る。同時に、そのような技術を上手く用いることで、人間が行なう処理の間違いを検出したり、より使いやすい入力装置を作成することが出来る。
 
しかし、このようなプログラムを作成するには多くの時間が必要であり、価格として高価になる場合が多い。そのため、実際にどの程度の使い易さを要求するかは、プログラムの作成の段階で問題になることが多い。実際には要求を増やすほど、作成の時間もコストも増える傾向があるため、常に優れた情報技術が用いられるとは限らないことにも注意する必要がある。しかし、[[w:ヒューマンエラー|ヒューマンエラー]]の発生を減らすためにも、使い方が明快で解りやすい情報技術の作成は重要な役割を持つ。この分野については今後の発展が期待されるところである。
 
==== 情報技術の進展が社会に及ぼす影響 ====
<!--
情報技術の進展が社会に及ぼす影響を認識させ,情報技術を社会の発展に役立てようとする心構えについて考えさせる。
-->
 
-->
現在ではハードウェアの面でも、ソフトウェアの面でも非常に多くの情報技術が開発されており、その数は現在でも増え続けている。これらは使いこなすことで我々の生活が便利になる可能性を秘めている一方、使い方を間違えば、我々の生活を大変な混乱に導く可能性も秘めている。実際的には、我々はコンピュータ技術の発展に常に注目し、それらを用いて実行できることを把握しておくことが望まれる。
 
=== 付録 ===
==== Pythonの導入 ====
 
====Pythonの導入====
 
Pythonは、よく知られたオープンソースソフトウェアであり、多くの環境で無料で用いることが出来る。ただし、無料であることの代償として、ソフトウェアのバグなどによって引き起こされたいかなる損害に対しても、作成者は責任を負わないことが明記されている。実際には、Pythonは非常に安定しており、そのような結果が引き起こされる確率は高くはないが、常に自身に責任があることには注意する必要がある。
 
Pythonは、[[w:Linux|Linux]]、[[w:Mac OS X|Mac OS X]]などでは配布者によってインストールされていることが多い。このような環境を用いているときには、コマンド
 
$python
 
を試してみるとよい。このとき既にインストールが行なわれているなら、pythonのバージョンが表示されるはずである。一方、インストールされていないときには'そのようなプログラムは存在しない'という文章が表示されるはずである。正確な文字列は環境による。この様な場合には、これらをインストールする手順が必要になる。詳しくは、[http://www.python.jp]などを参照すること。
 
Windowsを用いているときにも、いくつかの方法でPythonを導入することが出来る。[[w:ActivePython|ActivePython]]、[[w:Cygwin|Cygwin]]などを参照。また、マイクロソフト純正のプログラムツールとして、[[w:IronPython|IronPython]]が、現在開発中のようである。