前期ではC言語の機能である構造体や自己参照構造体、関数、ファイル分割を利用した簡単なプログラムが作成でき、デバッガを利用して処理をトレースできることを目標とする。後期では構造化プログラミングとデータ構造について復習した後、様々なアルゴリズムへの適用方法を学習し、C言語を用いてソートや探索などのプログラムに適用できることを目標とする。具体的には以下の3項目を目標とする。
1.構造化プログラミングの3構造と各構文について説明でき,配列,リスト構造,スタック,キュー,木構造などデータ構造についてプログラミングできる。
2.ソートにおいて単純交換・選択・挿入ソートに加えシェル・クイック・マージ・ヒープ・度数ソートについて説明できる。
3.探索において線形探索,2分探索,ハッシュ法,チェイン法,オープンアドレス法,2分探索木について説明できる。
概要:
コンピュータにおけるデータ形式とその処理方法はプログラム構築において処理時間や効率、安定性などに大きく影響を与える、プログラミングでの重要な要素である。現在のプログラミングで基礎となるデータの保存形式とその処理方法「データ構造とアルゴリズム」について学習することはプログラミングを学ぶ上で欠かせない事項である。
前期はC言語の高度な機能であるポインタ、構造体、関数呼び出し、ファイル分割とデバッガによる実行状況の確認方法を学習する。後期は構造化プログラミングとデータ構造の基本を学び、様々なアルゴルズムへの各種データ構造の適用例について学習する。
授業の進め方・方法:
前期はC言語について演習形式で構造化プログラミングおよび配列やデータ構造、そしてポインタについて実例を基に実技を行う。
後期は講義形式でデータ構造やソートやヒープなどのアルゴリズムについて詳しく説明する。講義中には説明後に例を示し、学生を指名して答えてもらうインタラクティブな内容を多く取り入れる。講義の最後に二分探索木のプログラムについて演習を行い、レポートとして提出する。
注意点:
1.評価については、評価割合に従って行います。ただし、適宜再試や追加課題を課し、加点することがあります。
2.中間試験を授業時間内に実施することがあります。
3.評価は試験を60%、レポートを40%として評価する。
|
|
週 |
授業内容 |
週ごとの到達目標 |
前期 |
1stQ |
1週 |
ガイダンス |
端末によるファイル操作、エディタの操作、コンパイル方法の確認などプログラムを実行するための操作ができる。
|
2週 |
構造化プログラミング、キャスト、デバッガ |
構造化プログラミング構造を理解し、判定分岐や繰り返しプログラムを作成できる。またキャストによる型変換の効果を理解し利用できる。
|
3週 |
メモリ空間と変数(ポインタ) |
グローバル、ローカル、静的、動的メモリについて違いが説明できる。また定数と変数およびその型について説明できる。
|
4週 |
配列(1) |
1次元整数配列と実数配列上の処理ができる、整数配列と実数配列の初期値設定ができる。
|
5週 |
配列(2) |
多次元配列および文字配列による文字列の実現、ヌル文字の効果を理解でき、文字配列の初期値を含めてプログラムできる。
|
6週 |
構造体とファイル分割(1) |
構造体を宣言できる、構造体の型について説明できる、構造体のメンバ変数にアクセスできる。
|
7週 |
構造体とファイル分割(2) |
構造体と配列の違い、動的確保についてプログラミングできる。
|
8週 |
ファイル入出力 |
データを入出力するプログラムが作成できる。またデータのファイル入出力プログラムを作成できる。
|
2ndQ |
9週 |
関数(1) |
関数プロトタイプ宣言ができる。
|
10週 |
関数(2) |
関数に適切な変数を渡し返り値を受け取ることができる。
|
11週 |
関数(3) |
再帰関数を定義できる。
|
12週 |
ポインタ変数(1) |
ポインタ変数宣言ができる、ポインタ変数に何が代入されているか理解できる、ポインタ変数を開放できる。
|
13週 |
ポインタ変数(2) |
動的記憶確保ができる、ポインタ変数と配列変数の表現形式を了解し利用できる。
|
14週 |
総合演習(1) |
要求仕様に基づいて、チームで課題に取り組み、プログラムの設計ができる。またメンバーの分担を決め、担当部位のプログラムができる。
|
15週 |
総合演習(2) |
担当プログラムを作成し、統合してプログラムをまとめることができる。
|
16週 |
|
|
後期 |
3rdQ |
1週 |
基本的なデータ構造 |
配列、多次元配列、構造体、スタック、キュー、リスト、リングリスト、ツリーの概要を説明できる。
|
2週 |
構造化プログラミング |
構成要素(順次/反復/分岐)とインデントについて説明できる。
|
3週 |
リスト構造 |
線形、循環、単方向、双方向リスト、リングバッファについて説明できる。
|
4週 |
スタックとキュー |
スタックとキューについて説明できる。
|
5週 |
再帰 |
再帰プログラムの例につい説明できる。
|
6週 |
探索(1) |
探索アルゴリズの基本について例を挙げて説明できる。
|
7週 |
探索(2) |
線形探索と2分探索とハッシュについて説明できる。
|
8週 |
ソート(1) |
単純変換ソート、選択ソート、挿入ソートについて説明できる。
|
4thQ |
9週 |
ソート(2) |
クイックソート、マージソートについて説明できる。
|
10週 |
ソート(3) |
ヒープソート、度数ソートについて説明できる。
|
11週 |
木構造(1) |
木構造、2分木と2分探索木について説明できる。
|
12週 |
木構造(2) |
順序木の探索手法について説明できる。また各ノード処理について説明できる。
|
13週 |
総合演習(1) |
二分探索木のプログラム構造を理解し、プログラムを理解できる。
|
14週 |
総合演習(2) |
横探索のプログラムを作成することができる。
|
15週 |
総合演習(3) |
プログラムの動作を確認し、レポートを論理的考察に基づいて作成することができる。
|
16週 |
|
|
分類 | 分野 | 学習内容 | 学習内容の到達目標 | 到達レベル | 授業週 |
基礎的能力 | 工学基礎 | 工学実験技術(各種測定方法、データ処理、考察方法) | 工学実験技術(各種測定方法、データ処理、考察方法) | 実験テーマの目的に沿って実験・測定結果の妥当性など実験データについて論理的な考察ができる。 | 3 | 前14,前15,後13,後14,後15 |
実験ノートや実験レポートの記載方法に沿ってレポート作成を実践できる。 | 3 | 前14,前15,後13,後14,後15 |
実験の考察などに必要な文献、参考資料などを収集できる。 | 3 | 前14,前15,後13,後14,後15 |
実験・実習を安全性や禁止事項など配慮して実践できる。 | 3 | 前14,前15,後13,後14,後15 |
個人・複数名での実験・実習であっても役割を意識して主体的に取り組むことができる。 | 3 | 前14,前15,後13,後14,後15 |
共同実験における基本的ルールを把握し、実践できる。 | 3 | 前14,前15,後13,後14,後15 |
レポートを期限内に提出できるように計画を立て、それを実践できる。 | 3 | 前14,前15,後13,後14,後15 |
専門的能力 | 分野別の専門工学 | 機械系分野 | 情報処理 | プログラムを実行するための手順を理解し、操作できる。 | 4 | 前1,前2,前3 |
定数と変数を説明できる。 | 4 | 前2,前3,前16,後1 |
整数型、実数型、文字型などのデータ型を説明できる。 | 4 | 前2,前3,前16,後1 |
演算子の種類と優先順位を理解し、適用できる。 | 4 | 前2,後13,後14,後15 |
算術演算および比較演算のプログラムを作成できる。 | 4 | 前2,後13,後14,後15 |
データを入力し、結果を出力するプログラムを作成できる。 | 4 | 前2,前8,後13,後14,後15 |
条件判断プログラムを作成できる。 | 4 | 前2,後2,後13,後14,後15 |
繰り返し処理プログラムを作成できる。 | 4 | 前2,後2,後13,後14,後15 |
一次元配列を使ったプログラムを作成できる。 | 4 | 前2,前3,前4,前5,後1,後2,後13,後14,後15 |
情報系分野 | プログラミング | 代入や演算子の概念を理解し、式を記述できる。 | 4 | 前2 |
プロシージャ(または、関数、サブルーチンなど)の概念を理解し、これらを含むプログラムを記述できる。 | 4 | 前2,前9,前10,前11,後2 |
変数の概念を説明できる。 | 4 | 前3,前4,前5,後1 |
データ型の概念を説明できる。 | 4 | 前3,前4,前5,前6,前7,後1,後2,後3,後4 |
制御構造の概念を理解し、条件分岐を記述できる。 | 4 | 前2,後1,後2,後13,後14,後15 |
制御構造の概念を理解し、反復処理を記述できる。 | 4 | 前2,後1,後2,後13,後14,後15 |
与えられた問題に対して、それを解決するためのソースプログラムを記述できる。 | 3 | 前14,前15,後13,後14,後15 |
ソフトウェア生成に必要なツールを使い、ソースプログラムをロードモジュールに変換して実行できる。 | 4 | 前14,前15,後13,後14,後15 |
与えられたソースプログラムを解析し、プログラムの動作を予測することができる。 | 3 | 前14,前15,後13,後14,後15 |
主要な言語処理プロセッサの種類と特徴を説明できる。 | 2 | 前1 |
ソフトウェア開発に利用する標準的なツールの種類と機能を説明できる。 | 2 | 前1 |
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを設計できる。 | 3 | 前14,前15,後13,後14,後15 |
要求仕様に従って、いずれかの手法により動作するプログラムを設計することができる。 | 3 | 前14,前15,後13,後14,後15 |
要求仕様に従って、いずれかの手法により動作するプログラムを実装することができる。 | 3 | 前14,前15,後13,後14,後15 |
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを実装できる。 | 3 | 前14,前15,後13,後14,後15 |
ソフトウェア | アルゴリズムの概念を説明できる。 | 4 | 前1,前2 |
与えられたアルゴリズムが問題を解決していく過程を説明できる。 | 4 | 後5,後6,後7,後8,後9,後10,後11,後12 |
同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを説明できる。 | 3 | 後12 |
整列、探索など、基本的なアルゴリズムについて説明できる。 | 4 | 後6,後7,後8,後9,後10 |
時間計算量によってアルゴリズムを比較・評価できることを説明できる。 | 3 | 後6,後7,後8,後9,後10 |
領域計算量などによってアルゴリズムを比較・評価できることを説明できる。 | 3 | 後8,後9,後10 |
コンピュータ内部でデータを表現する方法(データ構造)にはバリエーションがあることを説明できる。 | 3 | 前3 |
同一の問題に対し、選択したデータ構造によってアルゴリズムが変化しうることを説明できる。 | 3 | 後1,後2,後8,後9,後10 |
リスト構造、スタック、キュー、木構造などの基本的なデータ構造の概念と操作を説明できる。 | 4 | 前4,前5,後1,後2,後3,後4 |
リスト構造、スタック、キュー、木構造などの基本的なデータ構造を実装することができる。 | 4 | 前4,前5,後1,後2,後3,後4 |
ソースプログラムを解析することにより、計算量等のさまざまな観点から評価できる。 | 1 | 後13,後14,後15 |
同じ問題を解決する複数のプログラムを計算量等の観点から比較できる。 | 1 | 後6,後7,後8,後9,後10,後11,後12 |