1回目の授業

プログラミングとは



 コンピュータを用いるといろいろな仕事をすることができますが,ここでは方程式を解かせることを考えてみましょう。

ある2次方程式Ax2+Bx+C=0を取り上げます。まず,これを電卓で解くとすると,その手順は以下のようになるでしょう。

  1. B×Bを計算し,メモリーに入れる。

  2. -4×A×Cを計算し,メモリーに加える。

  3. メモリーに入っている数値(B2-4AC)を取り出して,正,0,負のどれかをみる。もし正であれば,

  4. メモリーに入っている数値のルートを取り,2で割り,さらにAで割った値(sqrt(B2-4AC)/(2A))をメモリーに入れる。

  5. -B/A/2を計算し,メモリー内の数値を加える。->一つ目の実根

  6. 同じく-B/A/2を計算し,それからメモリー内の数値を引く。->もう一つの実根

 コンピュータを用いて同じ問題を解く場合でも,その処理の計算法(アルゴリズム)は上と全く同じです。

ただ,電卓を使う場合には,アルゴリズムは人間の頭の中にあって,次に何と何を足すとか,何の符号を判断する,といったような計算法に従った処理の流れを人間が制御しているのに対して,コンピュータを使う場合には,必要な数値(データ),この例ではA,B,Cの値や,アルゴリズムを書いた命令書(プログラム)を始めにコンピュータに記憶させることによって,処理の流れを機械に制御させることになります。

すなわち,機械が人間の力を借りずに上記の手順を自動的に実行します。

したがって,この場合人間のする仕事は,直面している問題を如何に処理するか,というアルゴリズムを構築し,その手順をまとめ,プログラムを作るということになります。この作業のことをプログラミングと呼びます。

このことを考えると,

プログラミングが上手なひと ≠ コンピュータに詳しいひと

であり,

プログラミングが上手なひと = 論理的な思考能力の高いひと

のように言ったほうが適切であると思います。

そして,音響設計コースの学生に対して,社会が期待していることは,当然,後者のようなひとになってくれることであることは,しっかりと認識してもらいたいと,思っています。

話を元に戻しますと,できあがったプログラムをコンピュータに入力,実行させ,その結果を例えばディスプレイに表示させる(どのように結果を出力させるかについてもプログラミングします。ディスプレイではなくてプリンタに印刷させるという選択肢もあります。)ということになります。

処理時に問題が生じた場合は,コンピュータはそれに応じたエラーメッセージを送ってきます。人間はどこがいけなかったかを見つけ,プログラムを修正し(デバッグという),その修正されたプログラムを実行させるということになります。

プログラミング言語とは



 コンピュータの中では,あらゆる数値や命令が二つの電圧(皆さんの目の前にあるようなPCでは,通常0Vと5V)の組み合わせで表されています。

そのため本来は0と1だけで表される2進数を用いてプログラムを作らなければなりません。しかし,それでは非常に作業効率が悪いので,広く用いられているコンピュータでは,人間の言葉に近い言語(高級言語という)で書かれたプログラムを,コンピュータが理解できる2進数で書かれたプログラムに翻訳する機能をもったソフトウェアが組み込まれています。

その機能を実現するものの一つが,コンパイラと呼ばれるソフトウェアです。すなわち,この機能を組み込んだコンピュータであれば,皆さんは高級言語でプログラムを書くことができる,ということになるのです。

 プログラミング言語は,方言(基本は同じであるが,使用するシステムによって多少の違いがある)も含めると,2000〜3000はあるのではないかと言われています。各言語は独特な文法と構文を持っており,それぞれの言語によって適する仕事の内容が変わってきます。そのため,自分の直面している問題に応じて言語を使い分けることもできます。数千と言われるプログラミング言語の中で,広く使われているものはそう多くはなく,せいぜい十数種といったくらいです。



プログラミング言語の系譜


C言語について



 本授業の前半部で使用するプログラミング言語は,C言語です。

"C"言語という名前の由来は,B言語という言語の次にできた言語であるからです。B言語をさらに遡ると,BCPL言語という言語があります。このBCPL言語を基にして,初期のUNIX(オペレーティングシステム(OS)の一種)用に作られたのが,B言語です。

C言語は,このB言語の後を受けて,1972年にDEC社のPDP-11というミニコン上のUNIXを記述するために開発されました。開発者は,ベル研究所のDennis M. RitchieとBrian W. Kernighanです。

このような背景があるため,C言語とUNIXは,切っても切り離せない関係にあります。UNIXはC言語があったために,またC言語はUNIXがあったために世界中に広まったといっても過言ではありません。

現在では,利用可能なCコンパイラの数は数十にも及び,それらの多くはUNIX以外のOS上で使われています。C言語は,それだけ統一性や互換性のある言語だと言えるでしょう。

しかしながら,やはり本当の標準といえるものは,UNIX上のC言語でしょう。このようなことから,本授業の前半部では,使用するコンピュータのOSとしてはUNIXを取り上げることとします。

また,私は大学生の頃からこれまで(30年近く),たくさんのOSやプログラミング言語の,はやりすたりを見てきましたが,結局は,UNIXとC言語が,そのような,はやりすたりに無関係に,最も安定的,長期的,実用的に使われ,十分な需要もあり,成熟してきたOSとプログラミング言語である,と思っています。IEEEが毎年発表している,人気プログラミング言語ランキングの歴史を見てみても,それがよく分かります。

UNIX OSに慣れよう(宿題)



 最近では,グラフィカルユーザインターフェイス(GUI)環境の非常に洗練されたプログラミング開発環境が手に入りますが,本授業の前半部ではそのような開発環境は用いず,できる限りプリミティブな環境でプログラミングの練習をしてもらいます。

そこで,UNIXのユーザインターフェイスとしては,伝統的なコマンドラインインターフェイスを用いて作業をすることとします。

 まずは,UNIXのコマンドラインインターフェイスに慣れておきましょう。ためしに,以下の作業を行ってみて下さい。ただし,キーボードの Enter キーを押すことを (enter)と書くことにします。

  1. まず下準備として,以下のリンク先のファイル(itv.c)をダウンロードして,自分のホームフォルダに置いておいてください。

    itv.c



  2. UNIXのコマンドラインインターフェイスを使用するためには,ターミナルウィンドウを開いてシェルを利用します。シェルとは,ユーザが入力したコマンド(コンピュータへの命令)を解釈し,そのコマンドの作業内容を実行してくれるものです。すなわち,ユーザとUNIX OSの仲立ちをしてくれるのです。

    1. Finder上で,[アプリケーション]フォルダの中の,[ユーティリティ]フォルダを開きます。



      アプリケーションフォルダの中のユーティリティフォルダ

    2. [ターミナル]アイコンをダブルクリックして,ターミナルを起動します。



      ユーティリティフォルダの中のターミナルアイコン

    3. ターミナルウィンドウが開き,以下のようなシェルプロンプトが表示されます。
      (下記の例では,シェルプロンプトの頭部が slayer と表示されていますが,これは個人のMac OSの設定によって変わります。)

      slayer:~ ログイン名 $

  3. lsコマンドで,自分のホームディレクトリ(ディレクトリという用語は,MacやWindowsのフォルダという用語と同じように理解して下さい。)にあるファイルの一覧を表示してみましょう。

    slayer:~ ログイン名 $ ls(enter)

    初期設定で作成されているファイルやフォルダの名前が,表示されます。先にダウンロードしたitv.cという名前のファイルがホームディレクトリにあれば,そのファイル名が表示されます。その他でまだファイルを何も作っていなければ,それらは表示されません。

  4. pwdコマンドで,現在のディレクトリの名前を表示してみましょう。

    slayer:~ ログイン名 $ pwd(enter)

  5. catコマンドで,ファイルの内容を表示してみましょう。
    先程コピーしたitv.cという名前のファイルの内容を表示してみます。

    slayer:~ ログイン名 $ cat itv.c(enter)

ソースプログラムを編集してみよう(宿題)



 どのプログラミング言語を使ってプログラムを書く場合でも,それぞれの言語の約束(文法)に従って書く必要がありますが,文章を書くことには変わりありません。

したがって,プログラムを作るためには,まず最初に文章を入力・編集する何らかのソフトウェアを使って,使用する言語の文法に則ってプログラム(ソースプログラムという)を書けばよい,ということになります。

文章を入力・編集するソフトウェア(エディタという)は,何を使ってもかまいません(自分の使い易いものを選べばよい)。どのエディタを使っても,できあがるファイルの中身は変わりありません。

 ここでは,エディタを使ってソースプログラムを編集・保存する練習をしておきましょう。

  1. 自分の好きなエディタ(editor)で,先程ホームディレクトリにコピーした,itv.cという名前のファイルを開いて下さい。
    Macには標準で,テキストエディット というシンプルなエディタが付いています。それを使用する場合の手順は以下のとおりです。

    1. Finder上で,[アプリケーション]フォルダを開きます。

    2. [テキストエディット]アイコンをダブルクリックして,テキストエディットを起動します。



      アプリケーションフォルダの中のテキストエディットアイコン


    3. テキストエディットで作成するテキストファイルのフォーマットを,標準テキストに設定しておきます。
      [テキストエディット]メニューの[環境設定]をクリックすると,[環境設定]ダイアログボックスが表示されます。[フォーマット]の欄で,[標準テキスト]を選択しておいて下さい。

    4. 同じ[環境設定]ダイアログボックスで,[スマート引用符]と[スマートダッシュ記号]のチェックを外しておいて下さい。



      テキストエディットの[環境設定]ダイアログボックス

      このように環境設定したら,この設定は音響プログラミングの前半の授業においては変更しないでください。

    5. [ファイル]メニューの[開く...]をクリックすると,[開く]ダイアログボックスが表示されます。itv.cを選択して,[開く]ボタンをクリックして下さい。



      テキストエディットの[開く]ダイアログボックス


    6. このファイルは,簡単なアンケートになっています。Q1〜Q17の質問に対するあなたの答えを入力してみて下さい。

    7. 日本語を入力する場合には,日本語入力システムを起動します。spaceキーの右隣のかなキーを押すと,日本語入力が可能になります。(日本語入力システムを終了したいときは,spaceキーの左隣の英数キーを押します。そうすれば,半角英数字を入力することができます。)

  2. 入力し終わった文章を保存(save)します。ファイル名をたとえば prob1-1.c とします。テキストエディットを使用している場合の手順は以下のようです。

    1. option キーを押しながら,[ファイル]メニューをクリックし,[別名で保存...]をクリックします。

    2. [名前:]に,prob1-1.cと入力します。

    3. [場所:]は,自分のホームディレクトリ(自分のアカウント名がついているディレクトリ)にしておいて下さい。



      テキストエディットの[タイトルバー]


  3. 実は,保存したファイルは,簡単なC言語のソースプログラムになっています。ちょっとだけソースプログラムのコンパイル(compile)と実行を体験しておきましょう。

    1. ターミナルウィンドウをクリックしてアクティブにします。

    2. コンパイルのコマンドは gcc です。先程編集・保存したprob1-1.cという名前のソースプログラムをコンパイルしましょう。

      slayer:~ ログイン名 $ gcc prob1-1.c(enter)

    3. 何もメッセージがでなればうまく行っています。

    4. lsコマンドで a.out というファイルができているか確認してください。このファイルがコンパイルしてコンピュータが理解できるようになったプログラム(実行形式のプログラムという)です。

      slayer:~ ログイン名 $ ls(enter)

    5. a.outを実行させてみましょう。実行のさせ方は,他のUNIXのコマンド(lsなど)と同様です。

      slayer:~ ログイン名 $ a.out(enter)

    6. もし,

      a.out: コマンドが見つかりません.

      のように表示されたら,以下のように入力してみて下さい。

      slayer:~ ログイン名 $ ./a.out(enter)

    7. どうです,自分が入力した文章が表示されましたか?


レポートの提出の仕方(宿題)



 この授業の前半部では,毎回,実習問題として教科書に挙げられている幾つかのプログラムを入力し,コンパイルして実行結果を確認してもらいます。また,宿題として教科書の演習問題の中から幾つかを選んでそのプログラムを作成してもらいます。

毎回の実習問題と宿題は,Web学習システムにアップロードしていただきます。ここでは,その練習をしておきましょう。

  1. 九州大学 教育情報サービス のwebページ

    http://ecs.kyushu-u.ac.jp/

    の中の,

    [Web学習システム]

    をクリックしてください。

  2. 右上の

    [ログイン]

    をクリックし,ユーザ名とパスワードを入力して,九州大学Web学習システムに,ログインしてください。

  3. [コースを検索する]

    で,

    コース名:2023年度夏学期・月1木1・音響プログラミング演習(旧カリ:プログラミング言語)

    を検索し,上記のコース名をクリックして,

    [私を受講登録する]

    をクリックしてください。

  4. コース受講登録ができたら,

    [第1回]

    から,

    [repo1-1]

    をクリックしてください。

  5. [課題を追加する]

    をクリックし,

    [ファイルを追加]

    して,

    [変更を保存する]

    をクリックしてください。
    これで,作成したソースコードのファイル(上の例では,prob1-1.c)を,アップロードできます。

  6. [提出ステータス]

    の欄が

    評定のため提出済み

    となっていたら,きちんと提出されています。


itv.c


最後に

 コンピュータの勉強のコツは,「習うより慣れろ」であるとよく言われています。この授業では,プログラミングという作業の特徴を活かし,自分の書いたいろいろなプログラムを実際にコンピュータに実行させ,コンピュータがどのような反応を示すのか体験することによって,自らコンピュータの世界に飛び込んでみて下さい。

コンピュータの利用技術を学ぶためには,知識や技術を頭で覚えることも大切であるが,それと共に手を動かして,コンピュータを操作してみることで,始めて身につくものである。


戻る