![]() ![]() |
科目一覧へ戻る | 2020/04/02 現在 |
科目名(和文) /Course |
プログラミング言語Ⅱ |
---|---|
科目名(英文) /Course |
Programming Language II |
時間割コード /Registration Code |
24270601 |
学部(研究科) /Faculty |
情報工学部 |
学科(専攻) /Department |
人間情報工学科/スポーツシステム工学科 |
担当教員(○:代表教員)
/Principle Instructor (○) and Instructors |
○佐藤 洋一郎 |
オフィスアワー /Office Hour |
佐藤 洋一郎(毎週木曜日5限 上記以外でも,メール等で事前に連絡があれば,対応できます.また,部屋に居るときであれば,事前連絡がなくても,極力対応します.) |
開講年度 /Year of the Course |
2019年度 |
開講期間 /Term |
後期 |
対象学生 /Eligible Students |
1年,2年,3年,4年 |
単位数 /Credits |
2.0 |
更新日 /Date of renewal |
2019/03/06 |
---|---|
使用言語 /Language of Instruction |
日本語 |
オムニバス /Omnibus |
該当なし |
授業概略と目的 /Cource Description and Objectives |
C言語については既に「プログラミング言語I」や各演習等で学んでいるが、より大規模なプログラムを作るためにはより進んだ知識が必要である。そこで、ポインタや構造体など「大きなプログラム」で要求される事項を説明し、また基本的なデータ構造やアルゴリズムを実際にC言語で実装することで理解を深めることを目的とする。また、プログラミング言語を設計する上で必須であるコンパイラについての理解を深めることも目的とする。 |
履修に必要な知識?能力?キーワード /Prerequisites and Keywords |
「プログラミング言語I」に関連する知識 キーワード:データ構造、ポインタ、アルゴリズム、コンパイラ、字句解析、構文解析 |
履修上の注意 /Notes |
「プログラミング言語I」の内容を十分に理解しておくこと。また、「データ構造とアルゴリズム」は関連する内容を持つため履修することが望ましい。 |
教科書 /Textbook(s) |
指定しない。講義の開始時に資料を配布する。 |
参考文献等 /References |
柴田望洋 「詳解C言語 ポインタ完全攻略」 ソフトバンククリエイティブ |
自主学習ガイド /Expected Study Guide outside Coursework/Self-Directed Learning Other Than Coursework |
プログラム言語を学ぶには「人の話を聞く」だけでは不十分であり、「実際にプログラムを作成しその動作を理解すること」が不可欠である。さらに、自分の使用するプログラミング言語はどのようなものなのか、コンパイルとはどのようなことなのかについても深く理解することが、質の高いプログラムを作成するために必要であることを理解してほしい。本講義の課題をこなして満足するのではなく、そこから発展させていくこと。さらには講義から離れて自らの目的でプログラムを作成することで「プログラミング」を身につけてほしい。 |
資格等に関する事項 /Attention Relating to Professional License |
該当なし |
備考 /Notes |
特になし |
No. | 単元(授業回数) /Unit (Lesson Number) |
単元タイトルと概要 /Unit Title and Unit Description |
時間外学習 /Preparation and Review |
配付資料 /Handouts |
---|---|---|---|---|
1 | 1 | [メモリモデルとポインタの基礎] C言語が想定するメモリ構造を示し,それを用いて基本的なポインタ操作を学ぶ。 |
ポインタの意味をまとめ、配列について復習しておくこと。 | なし。 |
2 | 2 | [ポインタの型,演算] ポインタの型宣言及びポインタ変数に対する演算を理解する。 |
通常変数の型宣言について復習しておくこと。 | なし。 |
3 | 3 | [配列とポインタとの関係] C言語における配列とポインタとの関係及び文字列とポインタとの関係を理解する。 |
配列とポインタの相違をまとめ、データの種類を調べておくこと。 | なし。 |
4 | 4 | [構造体] 構造体の定義及び利用方法を学び,互いに関連のある複数のデータを一体として扱う方法を理解する。 |
構造体の応用例を調査し、コンピュータのメモリ階層について復習しておくこと。 | なし。 |
5 | 5 | [動的メモリ確保] 動的メモリ確保により「必要なときに必要なだけ」メモリが利用可能であることを知るとともに実際に動的メモリ確保を行う際の注意点を学ぶ。 |
静的?動的メモリ確保と、配列?ポインタとの関連をまとめておくこと。 | なし。 |
6 | 6 | [アルゴリズム1(論理的問題)] 数学パズル問題をプログラム向き論理的アルゴリズムで解くことを学ぶ。 |
授業で課した課題をこなしておくこと。 | 授業で使用するスライドを印刷したものを配布 |
7 | 7 | [アルゴリズム2(論理的問題)] 数学パズル問題をプログラム向き論理的アルゴリズムの一般化について学ぶ。 |
授業で課した課題をこなしておくこと。 | 授業で使用するスライドを印刷したものを配布。 |
8 | 8 | [アルゴリズム3(数値計算)] 多項式や組合せの数を対象に、計算可能範囲の拡大及び高精度化手法について学ぶ。 |
授業で課した課題をこなしておくこと。 | 授業で使用するスライドを印刷したものを配布。 |
9 | 9 | [プログラムとは] チューリングマシンの構造と動作を学ぶとともに、チューリングマシンの状態遷移とプログラムとの関係について理解する。 |
発展型チューリングマシンである量子チューリングマシンについて調査しておくこと。 | 授業で使用するスライドを印刷したものを配布。 |
10 | 10 | [プログラミングパラダイム] プログラミング言語の定義と要求される項目について学ぶとともに、現在のプログラミング言語の分類について学ぶ。 |
命令型言語、関数型言語、論理型言語、オブジェクト指向言語の特徴について、適切な比較項目を設定し、比較表を作成しておくこと。 | 授業で使用するスライドを印刷したものを配布。 |
11 | 11 | [命令型言語と理論モデル] 命令型言語の詳細について学ぶとともに、プログラミング言語に必須の理論モデルRAMを理解する。 |
関数型言語、論理型言語、オブジェクト指向言語の理論モデルについて調査しておくこと。また、第8回の例題について、RAMで実行できるプログラムを作成しておくこと。 | 授業で使用するスライドを印刷したものを配布 |
12 | 12 | [コンパイラと字句解析] プログラミング言語に必須のコンパイラの構造と動作について学ぶとともに、その最初の処理である字句解析について理解する。 |
C言語のfor文、if文、代入文について、適切な例文を設定し、字句解析を行っておくこと。 | 授業で使用するスライドを印刷したものを配布。 |
13 | 13 | [構文解析(構文規則)] プログラミング言語の構文規則を設計する際の形式文法について学ぶとともに、その分類について理解する。 |
チョムスキー階層の0型、1型、3型の詳細について調査しておくこと。 | 授業で使用するスライドを印刷したものを配布 |
14 | 14 | [構文解析(文脈自由文法)] 現在のプログラミング言語に利用されている文脈自由文法の定義を理解するとともに、構文規則の設計手法について学ぶ。 |
授業で課した課題をこなしておくこと。 | 授業で使用するスライドを印刷したものを配布 |
15 | 15 | [構文解析(導出)] 構文規則に基づく文の生成、すなわち導出について学ぶとともに、実際の解析に用いられる解析木の作成方法を理解する。さらに、無曖昧化の手法について理解する。 |
第12回の時間外学習で行った字句解析の結果を受けて、解析木を作成しておくこと。 | 授業で使用するスライドを印刷したものを配布。 |
16 | 16 | [期末試験] 理解度を確認する。 |
なし。 | なし。 |
No. |
到達目標 /Learning Goal |
知識?理解 /Knowledge & Undestanding |
技能?表現 /Skills & Expressions |
思考?判断 /Thoughts & Decisions |
伝達?コミュニケーション /Communication |
協働 /Cooperative Attitude |
||
---|---|---|---|---|---|---|---|---|
1 | ポインタや構造体の知識を学び活用できるようにする。 | ○ | ○ | ○ | ||||
2 | アルゴリズムの設計に求められる事項を理解する。 | ○ | ○ | ○ | ||||
3 | プログラミング言語への要求、その分類を学ぶ。 | ○ | ○ | |||||
4 | コンパイラの構造や処理手順を理解する。 | ○ | ○ | ○ |
No. |
到達目標 /Learning Goal |
定期試験 /Exam. |
レポート | ||||
---|---|---|---|---|---|---|---|
1 | ポインタや構造体の知識を学び活用できるようにする。 | ○ | ○ | ||||
2 | アルゴリズムの設計に求められる事項を理解する。 | ○ | ○ | ||||
3 | プログラミング言語への要求、その分類を学ぶ。 | ○ | ○ | ||||
4 | コンパイラの構造や処理手順を理解する。 | ○ | ○ | ||||
評価割合(%) /Allocation of Marks |
70 | 30 |