アルゴリズムとデータ構造

科目基礎情報

学校 旭川工業高等専門学校 開講年度 令和04年度 (2022年度)
授業科目 アルゴリズムとデータ構造
科目番号 0014 科目区分 専門 / 必修
授業形態 講義 単位の種別と単位数 履修単位: 2
開設学科 システム制御情報工学科 対象学年 3
開設期 通年 週時間数 2
教科書/教材 基礎C言語プログラミング(河野英昭,横尾徳保,重松保弘 著,共立出版),配布プリント
担当教員 戸村 豊明

到達目標

1. 与えられた問題を解決するためのソースプログラムを C 言語により記述し,コンパイル・リンク・実行できる.
2. 基本的な整列・探索アルゴリズムが問題を解決してゆく過程を説明できる.
3. リスト,スタック,キュー,ツリーといった基本的なデータ構造の概念と操作を説明できる.

ルーブリック

理想的な到達レベルの目安標準的な到達レベルの目安未到達レベルの目安
評価項目1与えられた複雑な問題を解決するための無駄のないソースプログラムをC言語により記述し,コンパイル・リンク・実行できる.与えられた単純な問題を解決するためのソースプログラムをC言語により記述し,コンパイル・リンク・実行できる.与えられた単純な問題を解決するためのソースプログラムをC言語により記述できない.
評価項目2基本的な整列・探索アルゴリズムが問題を解決してゆく過程を,図と文章でわかりやすく説明し,アルゴリズムをソースプログラムに記述できる.基本的な整列・探索アルゴリズムが問題を解決してゆく過程を,図と文章で説明できる.基本的な整列・探索アルゴリズムが問題を解決してゆく過程を説明できない.
評価項目3リスト,スタック,キュー,ツリーといった基本的なデータ構造の概念と操作を図と文章でわかりやすく説明し,これらをソースプログラムに記述できる.リスト,スタック,キュー,ツリーといった基本的なデータ構造の概念と操作を図と文章で説明できる.リスト,スタック,キュー,ツリーといった基本的なデータ構造の概念と操作を説明できない.

学科の到達目標項目との関係

学習・教育到達度目標 システム制御情報工学科の教育目標 ① 説明 閉じる
学習・教育到達度目標 本科の教育目標 ③ 説明 閉じる

教育方法等

概要:
開発ツールとして,Linux上で動作するCコンパイラ(gcc)を使用する.前期では,前年度科目の「情報処理」の学習内容を復習した後,C 言語を用いたより高度なプログラミングと,これを応用した基本的なデータ構造を学ぶ.最後に,基本的な整列・探索アルゴリズムを学ぶ.
授業の進め方・方法:
教科書と配布プリントを用いて内容を説明した後,プログラミングの練習問題に取り組み,その結果をレポートとして提出する.
注意点:
前年度の「情報処理」で学んだ C 言語の基礎(構文や基本的ななライブラリ関数の使い方など)を充分理解しておくこと.プログラムを書く時は,単純な論理を一つずつ丁寧に積み重ねるように思考することを心がけること.目的に応じたプログラムを自分自身で書けるようになることを目標として,小テストを適宜実施するので,授業終了後の復習を欠かさないこと.

授業の属性・履修上の区分

アクティブラーニング
ICT 利用
遠隔授業対応
実務経験のある教員による授業

授業計画

授業内容 週ごとの到達目標
前期
1stQ
1週 データ型,変数,定数(復習) 整数・実数・文字のデータ型,変数,定数を理解し,これらを用いたプログラムを記述できる.
2週 演算子(復習) 演算子の種類と優先度を理解し,演算子を用いたプログラムを記述できる.
3週 条件分岐と繰り返し(復習) if文,switch文,for文,while文,do-while文を理解し,これらを用いたプログラムを記述できる.
4週 配列と文字列(復習) 一次元配列と二次元配列を理解し,これらを用いたプログラムを記述できる.文字列を理解し,文字列を操作するプログラムを記述できる.
5週 ポインタ(復習) アドレスの概念とポインタ変数を理解し,ポインタ変数を用いたプログラムを記述できる.
6週 関数(復習) 関数の概念を理解し,関数を用いたプログラムを記述できる.
7週 再帰呼び出し 関数の再帰呼び出しの概念を理解し,再帰呼び出しを用いたプログラムを記述できる.
8週 中間試験 これまでの学習内容の理解度を確認する.
2ndQ
9週 試験答案の確認・解説 試験結果から自身の理解度を把握し,今後の学習に役立てられる.
10週 テキストファイル入出力 テキストファイルの概念を理解し,テキストファイルを読み書きするプログラムを記述できる.
11週 バイナリファイル入出力 バイナリファイルの概念を理解し,バイナリファイルを読み書きするプログラムを記述できる.
12週 分割コンパイル 1つのプログラムを複数のソースファイルとして記述し,それらをコンパイルする方法を理解できる.
13週 ヘッダファイル 外部変数や外部関数をヘッダファイルに記述し,矛盾することなく分割コンパイルする方法を理解できる.
14週 構造体 複数のデータを集約した構造体の概念を理解し,これを用いたプログラムを記述できる.
15週 構造体の配列とポインタ 構造体の配列とポインタについて理解し,これらを用いたプログラムを記述できる.
16週 期末試験 これまでの学習内容の理解度を確認する.
後期
3rdQ
1週 試験答案の確認・解説 試験結果から自身の理解度を把握し,今後の学習に役立てられる.
2週 動的メモリ確保1 動的メモリ確保・解放の概念を理解し,一次元配列の動的メモリ確保・解放を行うプログラムを記述できる.
3週 動的メモリ確保2 二次元配列の動的メモリ確保・解放を行うプログラムを記述できる.
4週 線形リスト1 線形リストの概念と種類を理解し,線形リストを用いた基本的なプログラムを記述できる.
5週 線形リスト2 要素の挿入・削除などの機能を持つ線形リストのプログラムを記述できる.
6週 キュー キューの概念を理解し,これを用いたプログラムを記述できる.
7週 スタック スタックの概念を理解し,これを用いたプログラムを記述できる.
8週 中間試験 これまでの学習内容の理解度を確認する.
4thQ
9週 試験答案の確認・解説 試験結果から自身の理解度を把握し,今後の学習に役立てられる.
10週 ツリー ツリーの概念を理解し,これを用いたプログラムを記述できる.
11週 単純ソートと選択ソート データを整列する単純ソートと選択ソートを理解し,これらを用いたプログラムを記述できる.
12週 バブルソートと挿入ソート データを整列するバブルソートと挿入ソートを理解し,これらを用いたプログラムを記述できる.
13週 線形探索 データを探索する線形探索の概念を理解し,これを用いたプログラムを記述できる.
14週 番兵ありの線形探索 番兵を配置した線形探索の概念を理解し,これを用いたプログラムを記述できる.
15週 2分探索 データを探索する2分探索の概念を理解し,これを用いたプログラムを記述できる.
16週 期末試験 これまでの学習内容の理解度を確認する.

モデルコアカリキュラムの学習内容と到達目標

分類分野学習内容学習内容の到達目標到達レベル授業週
基礎的能力工学基礎情報リテラシー情報リテラシー同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを知っている。3
与えられた基本的な問題を解くための適切なアルゴリズムを構築することができる。3
任意のプログラミング言語を用いて、構築したアルゴリズムを実装できる。3
専門的能力分野別の専門工学機械系分野情報処理プログラムを実行するための手順を理解し、操作できる。4前1
定数と変数を説明できる。4前1
整数型、実数型、文字型などのデータ型を説明できる。4前1,前5,前6
演算子の種類と優先順位を理解し、適用できる。4前1
算術演算および比較演算のプログラムを作成できる。4前1
データを入力し、結果を出力するプログラムを作成できる。4前2
条件判断プログラムを作成できる。4前2
繰り返し処理プログラムを作成できる。4前2
一次元配列を使ったプログラムを作成できる。4前5
情報系分野プログラミング代入や演算子の概念を理解し、式を記述できる。4
プロシージャ(または、関数、サブルーチンなど)の概念を理解し、これらを含むプログラムを記述できる。4
変数の概念を説明できる。3
データ型の概念を説明できる。3
制御構造の概念を理解し、条件分岐を記述できる。4
制御構造の概念を理解し、反復処理を記述できる。4
与えられた問題に対して、それを解決するためのソースプログラムを記述できる。4
ソフトウェア生成に必要なツールを使い、ソースプログラムをロードモジュールに変換して実行できる。4
与えられたソースプログラムを解析し、プログラムの動作を予測することができる。3
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを設計できる。3後15
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを実装できる。3後15
ソフトウェアアルゴリズムの概念を説明できる。3
与えられたアルゴリズムが問題を解決していく過程を説明できる。4後8,後9,後10,後11,後12
同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを説明できる。4後8,後9,後10,後11,後12
整列、探索など、基本的なアルゴリズムについて説明できる。3後8,後9,後10,後11,後12
時間計算量によってアルゴリズムを比較・評価できることを説明できる。3後8,後9,後10,後11,後12
領域計算量などによってアルゴリズムを比較・評価できることを説明できる。3後8,後9,後10,後11,後12
コンピュータ内部でデータを表現する方法(データ構造)にはバリエーションがあることを説明できる。4前11,前12,前13,前14,前15
同一の問題に対し、選択したデータ構造によってアルゴリズムが変化しうることを説明できる。4後8,後9,後10,後11,後12
リスト構造、スタック、キュー、木構造などの基本的なデータ構造の概念と操作を説明できる。3前11,前12,前13,前14,前15
リスト構造、スタック、キュー、木構造などの基本的なデータ構造を実装することができる。3
ソフトウェアを中心としたシステム開発のプロセスを説明できる。3後15
ソースプログラムを解析することにより、計算量等のさまざまな観点から評価できる。3後8,後9,後10,後11,後12
同じ問題を解決する複数のプログラムを計算量等の観点から比較できる。3後8,後9,後10,後11,後12
分野別の工学実験・実習能力情報系分野【実験・実習能力】情報系【実験・実習】与えられた問題に対してそれを解決するためのソースプログラムを、標準的な開発ツールや開発環境を利用して記述できる。4前1
ソフトウェア生成に利用される標準的なツールや環境を使い、ソースプログラムをロードモジュールに変換して実行できる。4前1
ソフトウェア開発の現場において標準的とされるツールを使い、生成したロードモジュールの動作を確認できる。4前1
問題を解決するために、与えられたアルゴリズムを用いてソースプログラムを記述し、得られた実行結果を確認できる。3

評価割合

試験発表相互評価態度ポートフォリオその他小テストレポート合計
総合評価割合60000002020100
基礎的能力4500000151575
専門的能力15000005525
分野横断的能力000000000