数理解析・計算機数学-I-2011

講師久保仁 准教授, 内藤久資 准教授
開講部局多元数理科学研究科 2011年度 後期
関連部局理学部/理学研究科
対象者理学部数理学科3年生 多元数理科学研究科 (学部生: 3単位 大学院生: 2単位週1回 全15回)

講義の目的

情報科学・計算機と数学との関連を(1 年間で)概観する。特に、「アルゴリズム」とは何かを、数学の視点から実例を通して解説する。そのアルゴリズムの実現のためのプログラム言語としてC言語の習得を目指す。

授業の工夫

この授業の主要な目標は種々の「アルゴリズム」を学び、アルゴリズムの重要性を理解することですが、学んだアルゴリズムを実際に利用するために C 言語のプログラミングを学習します。

プログラミングを学ぶ上では、単に「結果が出ればよい」という考え方でなく、「正しいプログラミング」を行う上では「アルゴリズム」が重要な位置を占めることと同時に、「規格に沿ったプログラミング」を行うことが重要であることを学びます。C 言語の規格を学ぶことで、その規格がコンピュータや OS の動きに密接に結び付いていることも学びます。同時に、アルゴリズムは古典的な数学の概念と深く結び付いていることも学びます。

この授業の最終的な目標は、アルゴリズムを通じて数学をより深く理解することと同時に、アルゴリズムを通じて、コンピュータそのものを理解することです。

講義の目的

コンピュータと数学が深い関わりを持っていることをアルゴリズムという視点から考える。

また、コンピュータおよびネットワークの基礎を理解することにより、それらを正しく使える汎用的知識・能力と、コンピュータに何をさせることができるのかを判断・創造する力を身につけることが主要な目的である。

また、プログラム言語の仕様を正しく理解することを通じて、アルゴリズムを正しく実装する力を身につけるとともに、コンピュータの動作原理と言語仕様との関連を理解する。さらに、アルゴリズムを正しく理解するだけではなく、それを正確に表現する方法やプログラムとして正しく実装する手段を習得することも重要な目的である。

単に「コンピュータの使い方がわかれば良い」とか、「電子メールの使い方や「ホームページ」の書き方を知りたい」と言うのは、本講義の目的ではない。「特定のアプリケーションの使い方を教えてほしい」なんてのは論外である。

講義内容

この講義でとりあげるテーマは以下の通りである。

  • コンピュータとネットワークの基礎知識(コンピュータリテラシ)
  • C言語:
    C言語は ANSI の規格に沿ったものを解説する。内容は「配列」、「ポインタ」、「文字列」までとする。
  • 種々の初歩的なアルゴリズム:
    ただし、この講義では「浮動小数点計算」に関わるアルゴリズムは扱わない。主に「整数計算」に関わるアルゴリズムのみを考察する。

この中で、「コンピュータリテラシ」の部分の多くは、教育実習で4年生の出席が少なくなる6 月前半に講義する。 (本来は、教職につく学生こそリテラシを身につけるべきであるが、リテラシを他の時期にやると、C言語やアルゴリズムの内容が佳境に入った頃に4年生が抜けるため、4年生で落ちこぼれる学生が大量に発生するための措置である。)

講義の概要

計算機内部での数値の表現方法や、「ユークリッドの互除法」、「エラトステネスのふるい」などの極めて初歩的なアルゴリズムを概観する。また、数学とは直接は関係しないが、コンピュータを利用する上での基礎的な教養としてのコンピュータリテラシ(コンピュータの歴史・原理やコンピュータネットワーク)を解説する。

授業の進め方

基本的には、1時間目を講義、2時間目を実習とする。通常は、講義を90分〜120分程度(きりが良いところまで)行い、10分〜15分程度の休憩の後に、実習を行う。

ただし、1・2時間目両方を講義にあてることや、中途半端な時間から実習または演習を開始することもありうる。

なお、講義は8時45分から開始する。学生諸君の中に「朝イチの授業は苦手」と感じている人が多いのは良く理解している。(かく言う私も、学生時代は朝の授業はサボりまくっていた。)しかし、春学期の授業でもあるので、遅刻しないように出席してもらいたい。

履修に必要な知識

数学的な内容は「高校までに学習した数学」で十分である。しかし、単なる数学的な知識だけが要求されるのではなく、その内容を理解するために必要な考え方を身につけていることが重要である。

履修の際のアドバイス

「コンピュータの授業」は「コンピュータの使い方」を習得するためのものではない。コンピュータを単なるユーザとして利用するだけではなく、コンピュータを基礎から数学的な立場で理解するための努力を惜しまない学生のみを歓迎する。たとえ教職免許の取得が主目的であっても、この考え方を理解して履修してほしい。

実習について

実習は、学部生については「情報メディア教育センター理学部サテライトラボ」を、大学院生については多元数理科学研究科計算機室を利用する。

講義で解説する各種のアルゴリズムをC言語を利用して、実際にアルゴリズムを実装する(プログラムを書く)ことを実習の内容とする。

実習で利用するアプリケーションに関しては、各機種固有のものではなく、できる限り標準的と思われるものを利用する。それ以外のものを利用するのは自由だが、そのことに起因するトラブルなどに対しては一切責任を持たない。各自のオペレーション・ミスなどに起因するトラブルに関しては、各自で責任を持つこと。

出席について

毎回出席をとるが出席は成績には一切関係しない。また、毎回授業に対して電子メールにより「感想・その他」の提出を求める。この「感想・その他」のメールは授業のあった週の翌週月曜日夕方までに下に指定するメールアドレス宛に送付すること。「感想・その他」のメールの内容を講義にフィードバックしたい。

レポートについて

授業中に課題として出したプログラムに関しては、授業のあった週の翌週月曜日夕方までに電子メールによりレポートとして提出すること。ただし、特に問題のない限り、個別にレポートのコメントは返送しない。(つまり、コメントが戻ってこなければ、特に問題がなかったと思って欲しい。)このレポート課題は必ず提出すること。(レポート課題をきちんとこなしていくことが単位を習得するための最も簡単な方法である。)

参考書

C 言語について

  • B. W. Kernighan and D. M. Ritchie. プログラミング言語 C 第 2 版. 石田晴久 訳.共立出版, 1989.

UNIX について

  • B. W. Kernighan and R. Pike. UNIX プログラミング環境. アスキー出版局, 1985.
  • A.Frisch. UNIX システム管理. オライリージャパン, 1998.
  • 坂本文. 楽しいUNIX. アスキー出版局, 1990.
  • 坂本文. 続楽しいUNIX. アスキー出版局, 1993.

このシラバスについて

完全なシラバスは、 講義シラバス をご覧下さい。

外部リンク

先生の授業ページは こちら

実習課題

毎回の実習時に行う課題は、講義ノート から見ることができます。

スケジュール

講義内容
1 【イントロダクション】
−講義の内容と趣旨の説明
−評価方法の説明
【UNIX (1)】
−ログイン・ログアウトの方法
−パスワード
−X Window System の利用法
−emacs の利用法
【C言語(1)】
−C言語の処理系の利用法(1)
−簡単なプログラム(1)
−“Hello World”
−簡単な計算
2 【UNIX (2)】
−ファイルシステムとディレクトリ
−テキストファイルとその操作
−シェル
−基本コマンド(2)
【C言語(2)】
−C言語の処理系の利用法(2)
−簡単なプログラム(2)
−1 から10 までの和を求める
−偶奇を判定する
3 【リテラシ (1)】
−計算機内部での整数の表現方法
−2の補数を用いた減算の方法
【C言語 (3)】
−プログラム言語とは
−C言語の処理系
−変数とは
−整数型変数の宣言(定義)と値の代入方法
4 【C言語 (4)】
−整数型変数の宣言(定義)と値の代入方法(続き)
−文字型変数と文字コード
−式と文
−演算
−算術演算
−ビット演算
−式の値
−代入演算
−演算の優先順位と結合規則
【リテラシ (2)】
−2の補数を用いた減算の方法(続き)
−デジタル回路と加算器
5 【リテラシ (3)】
−2の補数を用いた減算の方法(続き)
−デジタル回路と加算器(続き)
−浮動小数点数の内部表現
【C言語 (5)】
−演算
−算術演算
−ビット演算
−式の値
−代入演算
−演算の優先順位と結合規則
−条件文
−繰り返し文
6 【アルゴリズム (1)】
−ユークリッドの互除法
−正当性
−計算量評価
−拡張されたユークリッドの互除法
−2進互除法
7 【C言語 (6)】
− 関数 (1)
−関数の宣言の意味
−変数のクラス
−初期化
−メモリ配置
8 【リテラシ (4)】
−コンピュータの歴史
−コンピュータ・ハードウェア
−コンピュータ・ソフトウェア
−コンピュータ・ネットワーク
9 【リテラシ (5)】
−コンピュータ・ネットワーク(続き)
−ネットワークリテラシ
10 【C言語 (7)】
−配列と文字列
11 【アルゴリズム (2)】
−エラトステネスのふるい
−基数変換
12 【C言語 (8)】
−ポインタ
−ポインタを引数とした関数
13 【C言語 (9)】
−ポインタ(続き)
【アルゴリズム (3)】
− 再帰
14 【アルゴリズム (4)】
− 再帰(続き)
【C言語 (10)】
−ファイル入出力
−main 関数の引数
15 【C言語 (11)】
−ファイル入出力(続き)
−これまでの課題の一部の解説

講義ノート

第 1 回

第 2 回

第 3 回

第 4 回

第 5 回

第 6 回

第 7 回

第 8 回

第 9 回

第 10 回

第 11 回

第 12 回

第 13 回

第 14 回

第 15 回

成績評価

講義終了後の最終レポートの内容によってのみ評価する。それ以外の課題は評価の対象としない。すなわち、講義・実習中に提出を求めたレポートの内容は受講者の理解度を判断するための材料としてのみ用いる。出席も成績には一切関係しない。 ただし、第 7 回の講義後に「中間レポート」の提出を求める。中間レポートは、その時点での講義内容の理解度を判断する材料とし、最終的な評価には反映させないが、中間レポートを提出しない学生は評価の対象としない。 いかなる場合でも、レポートは自力で作成すること。他人のレポートまたは、教科書・参考書を写した(コピーして単純に書き直したものを含む)と考えられるものがあった場合には単位を出さない。(当然、元のレポートを作成した学生にも単位を出さない。)

中間、学期末レポート課題

おおよその評価基準

この講義の評価の目安は、以下の通りである:

合格最低基準(可) 講義で解説したアルゴリズムを用いて、C言語による正しいプログラムを書けること。特に、標準的なプログラムを正しく書けること。(要するに、C言語のプログラミングと初歩的なアルゴリズムが最低限のレベルで理解できていること。)
講義で解説したアルゴリズムを正しく理解し、C言語による正しいプログラムを書けること。(要するに、初歩的なアルゴリズムを正しく理解し、それをC言語で正しくプログラミングできること。)
講義で解説したアルゴリズムを応用して、アルゴリズムを自分で考え、それをC言語で正確にプログラムできること。特に、C言語の仕様を正しく理解できていること。

投稿日

March 13, 2020