#author("2018-01-31T23:18:06+09:00","","")
*到達目標 [#yafac1ab]
#author("2023-01-31T10:36:30+09:00","default:maa","maa")

コンピュータとソフトウェアの動作原理を理解し、情報システムの利便性とリスクを理解すること。

* 授業概要 [#p2492b2d]
 OS (Windows 等のオペレーティングシステム)やアプリケーションソフトの進化によって、パソコンは格段に使いやすくなり広く一般の人々の間に普及していった一方、“利用者がプログラム可能な汎用計算機” としての一面を知らない人々が増えてきた。

 この実習では、教育用コンピュータ言語 BASIC によるプログラミングを通し、コンピュータとソフトウェアの動作原理を理解することを主な目的としている。この動作原理を理解することにより、ソフトウェアのバグとはどういうものなのか、コンピュータウィルスの正体は何なのか、近年多発しているシステムトラブルによる社会インフラ(交通システム、金融システム等)の停止は何故起こるのか等、情報社会で重要な知識を体得することを期待する。

 BASIC 言語については初歩の初歩から解説し、例題を元にプログラミングを体験しながら、数当てゲーム等の簡単なプログラム(ソフトウェア)から神経衰弱ゲーム、ブロック崩し(ただしブロックなし...時間があればブロックを置きます)の作成を目指す。前述のように、あくまで目的は全体像を理解することであり、プログラミングを覚えることではないので、気楽に受講してもらいたい。

#ref(hardsoft.png,right,nolink,around)
* コンピュータとソフトウェア [#reb414f8]
 コンピュータ(ハードウェア)は OS (Windows や Mac OS、iOS、Android などのオペレーティングシステム)やアプリケーションソフト(Word や Excel など)等のソフトウェアがなければ動きません。OS はコンピュータのハードウェアとしてのアーキテクチャの違い(機械としての構造上の違い)を緩衝し、ファイル管理やいろいろなデバイス(画面、音源、キーボード、マウス…)を制御するなど、基本的なことをやってくれる重要なソフトウェアです。そしてアプリケーションソフトは、OS の機能を用いて作られた様々なソフトウェアのことをいいます。また、ソフトウェアは普通、複数のプログラム(ソフトウェアの最小単位)から成り立っています。

* プログラムとコンピュータ言語 [#x757b822]
 プログラムはコンピュータに対する動作の指示書です。コンピュータは与えられたプログラムの指示通りに全てを処理していきます。当然、何をどのように処理するのかは、プログラムを書く人間が考えなければなりません。プログラムには想定される全ての出来事に対する対処法を漏らすことなく記述しなければなりません。もし、想定外の出来事が起こったとき、その対処法が記述されていなければ、コンピュータは人間の想定外の動作を見せることになるでしょう。これがいわゆる ”バグ” と呼ばれるものです。また、同じ処理をするプログラムでも、やり方が何通りも考えられる場合があります。この処理のやり方をアルゴリズムといい、プログラミングには効率のよいアルゴリズムを創造することが求められます。

 人間同士が情報を伝達するために言葉を使うように、人間がコンピュータに ”指示” を与えるためにも言葉が必要です。これがコンピュータ言語(プログラミング言語)です。人間の言葉が複数あるように、コンピュータ言語も複数存在します。ここでは、人間が直感的に最もわかりやすい教育用コンピュータ言語の BASIC を使用します。

 ここでは、フリーソフトとして公開されている「[[N88互換BASIC for Windows:https://www.vector.co.jp/soft/win31/prog/se025866.html]]」をインストール操作なしで使用するために再構成したもの利用します。通常通り PC にインストールする場合には「[[N88互換BASIC for Windows95:https://www.vector.co.jp/soft/win95/prog/se055956.html]]」を使用してください。

* BASIC言語の基本命令文と文法 [#md798e85]
 プログラムを作成するためには、使用するプログラム言語の文法を理解する必要があります。ここでは、BASIC言語でのプログラミングに最低限必要と思われる、基本的な命令とその文法(書式)、変数の使い方などを学習します。

:[[INPUT文とPRINT文]]|基本入力と基本出力

:[[GOTO文]]|強制的な実行行制御

:[[IF文]]|条件による処理の選択

:[[FOR〜NEXT文]]|反復

:[[WHILE〜WEND文]]|条件付き反復

:[[READ〜DATA文]]|静的データの読み取り

:[[配列変数]]|

:[[GOSUB文]]|サブルーチン

:[[その他]]|例題や実習で使われたその他の命令や関数

* 例題 : カードゲームを作ってみる [#p9638dca]
 ここまで、厳選した基本的な命令をいくつか見てきましたが、これらを組み合わせることによって、かなり複雑なプログラムを作成することができます。ここでは、ちょっと本格的?なプログラムをとりあえず動かしてみて、そのことを実感してみましょう。そして、カードゲームの流れと、プログラムの流れを比較検討してみよう。

+ [[神経衰弱ゲーム]]

* 演習 : ブロック崩し(ただしブロックなし...)を作ってみる[#maebc835]
 ここでは、誰もが一度はやったことがあると思うブロック崩し(画面内を跳ね回っているボールをラケットでうち返すゲームです。ただし、ブロックなし...)を作ってみましょう。一見難しそうに思いますが、動作内容をひとつひとつ分解してプログラムし、適宜追加していけばできあがってしまいます。いくつか新しい命令も出てきますが、順番に作り上げていきましょう。

+ [[LOCATE文でボールを動かす]]
+ [[ボールが壁に当たると跳ね返るようにする]]
+ [[ラケットを左右に動かせるようにする]]
+ [[ラケットにボールが当たると跳ね返るようにする]]
+ [[下の壁を取ってゲームを仕上げる]]
+ [[ちょっと細工をしてアクション性を高める工夫をする]]
+ [[【発展】1段だけブロックを置く]]
+ [[【発展】複数段ブロックを置けるように拡張する]]
+ [[【発展】複数段ブロックを置き、さらにブロックの角で当たり判定をする]]

* まとめ [#zace5675]

 BASIC 言語によるプログラミング(コンピュータソフトウェアの作成)を体験していかがでしたか?いくつかの命令や制御文をうまく組み合わせてプログラムの流れを作る。変数の値が今どうなっているかを調べて現在の状態を把握する。把握した状態に応じて実行させることを決める。プログラムの多くは特定の条件になるまで同じことを繰り返す。そんな感じでしたね。そして、プログラムを体験した人だけが実感できる貴重な事実を理解できたはずだと思います。それは、「''把握した状態に応じて実行''」のところでしたね。正しく動くソフトウェアを作るためには、あらかじめ「''実行中に起こり得るすべての状態''」に対する「''実行させること''」を完全に記述しておく必要があることでした。「コインを投げたら表と裏の2通りしか起こらない」と思うのが普通ですが、めったに起こらないことだけど「コインが立ってしまう」ことだってあるかも知れない... プログラム時の思い込みや勘違いで簡単に動作不良を起こすのです。また、命令のスペルミスなどは実行時にエラーとして指摘されてすぐに分かりますが、参照すべき変数名をうっかり間違ってしまったりした時にはエラーにはなりませんでしたね。エラーとはいわれないけど実行するとなんだかおかしい... ちゃんと動いているんだけど、ある特定の条件で変になる... こんなことを必ず体験したことだと思います。''バグ''の正体を理解できましたね。今のところプログラミングは人間にしかできません。私たちが生きるこの情報社会は ICT (情報通信技術)、すなわち、コンピュータとソフトウェアによるシステムが基盤になっています。講義概要にも書いたシステムトラブルによる社会インフラ(交通システム、金融システム等)の停止は完全には避けられない(バグは絶対に潜んでいる)ものであり、クルマのエンジン、アクセル、ブレーキ制御など、私たちの命にかかわるようなところでも、いたる所でソフトウェアがすべてを統制しているのです。

* 著作権 [#ea13a355]

本コンテンツ内のすべてのソースコードの著作権は有澤が有しています。


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS