プログラミング

科目基礎情報

学校 仙台高等専門学校 開講年度 平成28年度 (2016年度)
授業科目 プログラミング
科目番号 0018 科目区分 専門 / 必修
授業形態 授業 単位の種別と単位数 履修単位: 3
開設学科 情報システム工学科 対象学年 3
開設期 通年 週時間数 3
教科書/教材 A. 「明快入門C」 林晴比古 著 (SBクリエイティブ) B. 「C言語によるアルゴリズム入門」 河西朝雄 著 (技術評論社) C. 「やさしいJava オブジェクト指向編」 髙橋麻奈著 (ソフトバンククリエイティブ)
担当教員 安藤 敏彦,竹島 久志

到達目標

1. C言語の文法全般を理解し、小・中規模なプログラムを作成できる。
2. 基本アルゴリズム(整列、探索等)および基本データ構造(リスト、スタック、キュー等)について説明でき、それらを使ったプログラミングができる。
3. Java言語を用いてクラスとメソッドを理解し、小規模なJavaプログラムを作成できる。

ルーブリック

理想的な到達レベルの目安標準的な到達レベルの目安未到達レベルの目安
C言語の文法全般を理解し、小・中規模なプログラミングができる。C言語の文法全般を理解し、中規模なプログラムを作成できる。C言語の文法全般を理解し、小規模なプログラムを作成できる。C言語の文法を一部理解し、限定的なプログラミングができる。
基本アルゴリズム(整列、探索等)および基本データ構造(リスト、スタック、キュー等)について説明でき、それらを使ったプログラミングができる。基本アルゴリズム(整列、探索等)および基本データ構造(リスト、スタック、キュー等)の全てについて説明でき、それらを使ったプログラムを作成できる。基本アルゴリズム(整列、探索等)および基本データ構造(リスト、スタック、キュー等)のほとんどについて説明でき、それらを使ったプログラムが作成できる。基本アルゴリズム(整列、探索等)および基本データ構造(リスト、スタック、キュー等)の一部について説明でき、それらの一部を使ったプログラムを作成できる。
Java言語のクラスを理解し、小規模なJavaプログラムを作成できる。Java言語のクラスを理解し、小規模なJavaプログラムを作成できる。Java言語のクラスを理解し、基本的なJavaプログラムを作成できる。限定的なJavaプログラムを作成できる。

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

教育方法等

概要:
2年次の「プログラミング基礎」で学んだC言語プログラミングを復習および強化しながら、不足していた文法(構造体等)学習し、小・中規模のプログラムを作成する課題に取り組む。基本アルゴリズムおよび基本データ構造について学習し、それらを使ったプログラムを作成することにより理解を深める。Java言語を学習し,オブジェクト指向プログラミングの基礎であるクラスとメソッドについて学習する。
授業の進め方・方法:
授業は6期に分けて、前期は週2回、後期は週1回実施する。第1期はC言語の完成(担当:竹島)、第2期と第3期はアルゴリズム(担当:竹島)、第4期と第5期はデータ構造(担当:海野)、第6期はJava言語(担当:安藤)である。第1期から第3期の基本的な1回の授業の構成は、前半に説明・演習問題・確認問題等により、その単元の内容を理解し、後半にプログラムを作成する実習課題に取り組む。(※海野先生、安藤先生へ:授業の進め方を記入して下さい。)各期毎に試験を実施する。
注意点:
・本科目は,2年の「プログラミング基礎」の続きであり,4年の「応用プログラミングI」,「ディジタルシステムA・B」に発展する。Java言語については4年の「ソフトウェア分析設計」への導入である。
・授業は講義と実習からなり,実習課題はレポートとして提出する。
・プログラムの作成にあたっては,①課題内容を十分検討,②プログラムの設計図(フローチャート/PAD),③コーディング,④検証(テスト)を行い、課題を満足するか確認することが大切である。
・事前事後の学習内容:実習課題は授業時間内に終わらない場合が多いため、事後の学習として放課後等を利用して実習課題を完成させる。

授業計画

授業内容 週ごとの到達目標
前期
1stQ
1週 第1期:C言語の完成
1.導入、復習1、PADの導入
2.復習2:課題プログラミング

1.基礎的なプログラムを読み書きできる。PADを描ける。
2.乱数関数を使うことが出来る。じゃんけんの勝敗規則を発見できる。「じゃんけんゲーム」のPADを描き、プログラミングできる。
2週 1.復習3:ポインタとコマンドライン入力
2.構造体1
1.ポインタを使ったプログラムを読み書きできる。コマンドライン引数を使ったプログラミングができる。
2.構造体を使ったプログラムを読み書きできる。
3週 1.構造体2
2.動的領域確保 malloc
1.構造体のポインタを使ったプログラムを読み書きできる。
2.記憶領域の動的確保関数mallocを使ったプログラムを読み書きできる。
4週 1.演習問題(第1期のまとめ)
2.第1期のテスト
1.第1期のまとめの問題を解くことができる。
2.第1期のテストの問題を解くことができる。
5週 第2期:アルゴリズム(その1)
1.デバッガ(gdb)
2.ウォーミングアップ:漸化式
1.デバッガgdbを使うことができる。gdbのクイック・リファレンスを作成できる。
2.アルゴリズムとは何か説明できる。「組み合わせ数」を求めるプログラムを求めるプログラムを、複数のアルゴリズムで作成できる。
6週 1.基本ソート1:直接選択法、バブルソート
2.基本ソート2:基本挿入法
1.基本ソートである直接選択法とバブルソートについてアルゴリズムを説明できる。バブルソートのプログラムを作成できる。
2.基本挿入法によるソートアルゴリズムを説明できる。時間計算量を求めることができる。基本挿入法によるソートプログラムを作成できる。直接選択法、バブルソート、基本挿入法のプログラムを作成できる。
7週 1.ソートの計算量、マージ、マージソート
2.サーチ:逐次探索、2分探索
1.基本ソートの計算量(ビッグO表記)を求めることができる。マージのアルゴリズムを説明できる。マージソートのプログラムを作成できる。
2.探索アルゴリズムを2種類学び、それらの探索速度が大きく異ることを説明できる。2分探索法のアルゴリズムのPADを描ける。2分探索法を用いたプログラムを作成できる。
8週 1.演習問題(第2期のまとめ)
2.第2期のテスト(前期中間試験)
1.第2期のまとめの問題を解くことができる。
2.第2期のテスト問題を解くことができる。
2ndQ
9週 第3期:アルゴリズム(その2)
1.文字列の照合(パターンマッチング)
2.ハッシュ
1.文字列の照合(単純な方法)のPADを描ける。Boyer-Moore法による文字列の照合のPADを描ける。Boyer-Moore法を用いた文字列照合プログラムを作成できる。
2.ハッシュの演習問題を解くことができる。ハッシュを使った探索プログラムを作成できる。
10週 1.再帰呼び出し:順列生成
2.再帰呼び出し:迷路
1.順列の全並びを生成するアルゴリズム(再帰呼び出し使用)のPADを描ける。巡回セールスマン問題のプログラムを作成できる。
2.迷路を解く再帰呼び出し関数と同じアルゴリズムで迷路を解ける。迷路を再帰呼び出し関数を用いて解くプログラムを作成できる。
11週 1.ソートのまとめ、再帰呼び出し:クイックソート
2.演習問題(第3期のまとめ)
1.各ソートのアルゴリズムを一言で表現できる。クイックソートのアルゴリズムのPADを描ける。クイックソートのプログラムを作成できる。
2.第3期の問題を解くことができる。
12週 1.第3期のテスト
第4期:データ構造
2.スタック
1.第3期のテスト問題を解くことができる。
2.スタックの基本的なデータ構造の概念と操作を説明することができる。
13週 1.キュー
2.リスト構造(作成)
1.キューの基本的なデータ構造の概念と操作を説明できる。
2.リスト構造の概念を理解しリストを作成するプログラムを作ることができる。
14週 1.リスト構造(挿入)
2.リスト構造(削除)
1.リストに要素を挿入し削除するアルゴリズムを説明することができる。
2.リスト構造の概念を理解しリストの挿入と削除のプログラムを作成することができる。
15週 1.双方向リスト
2.逆ポーランド記法,パージング
1.双方向リストの概念を理解し要素の操作のプログラムが作成できる。
2.式を逆ポーランド記法の式に変換し,パージングにより式の値を求めるプログラムを作成することができる。
16週 1.演習問題(第4期のまとめ)
2.第4期のテスト(前期末試験)
1.第4期のまとめの問題を解くことができる。
2.第4期のテストの問題を解くことができる。
後期
3rdQ
1週 第5期:木とグラフ
木,2分探索木(配列表現,動的表現,再帰的表現)
木構造の概念を理解し説明することができる。2分探索木を用いたサーチプログラムを作成できる。
2週 2分探索木(走査) 2分探索木のノードを走査するアルゴリズムを理解できる。
3週 ヒープの作成(上方移動,下方移動) 上方移動と下方移動によるヒープ・データ作成のアルゴリズムを理解しプログラムを作成できる。
4週 ヒープソート(計算量) ヒープソートのアルゴリズムを理解し計算量を評価することができる。
5週 グラフ,グラフの探索 グラフの概念と探索のアルゴリズムを理解しプログラムを作成することができる。
6週 Eulerの一筆書き,最短絡問題 Eulerの一筆書きと最短絡問題のダイクストラ法を理解しプログラムを作成できる。
7週 演習問題(第5期のまとめ) 第5期のまとめの問題を解くことができる。
8週 第5期のテスト(後期中間試験) 第5期のテストの問題を解くことができる。
4thQ
9週 第6期:Java言語とオブジェクト指向プログラミング
オブジェクト指向概論
オブジェクト指向の特徴である継承、カプセル化、ポリモーフィズムについて説明できる。
10週 クラスとインスタンス
演習(Java言語の基本的な書き方)
クラスを用いたJava言語のプログラムを書くことができる。
11週 クラスと継承
演習(継承)
クラスの継承をJava言語で書くことができる。
12週 パッケージとクラスのアクセス制限 Java言語における変数やメソッドのスコープについて説明できる。
13週 ポリモーフィズム1
抽象クラス
抽象クラスについて説明でき、抽象クラスを使ったプログラムを書くことができる。
14週 ポリモーフィズム2
インタフェース
演習(ポリモーフィズム)
インタフェースについて説明でき、インタフェースを使ったプログラムを作ることができる。
15週 第6期のまとめ
16週

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

分類分野学習内容学習内容の到達目標到達レベル授業週
基礎的能力工学基礎情報リテラシー情報リテラシーデータの型とデータ構造が理解できる3前1,前2
専門的能力分野別の専門工学電気・電子系分野情報基本的なアルゴリズムを理解し、図式表現できる。3
プログラミング言語を用いて基本的なプログラミングができる。3前1,前2
情報系分野プログラミング変数とデータ型の概念を説明できる。3前1,前2
代入や演算子の概念を理解し、式を記述できる。3前1,前2
制御構造の概念を理解し、条件分岐や反復処理を記述できる。3前1,前2
プロシージャ(または、関数、サブルーチンなど)の概念を理解し、これらを含むプログラムを記述できる。3前1,前2
与えられた問題に対して、それを解決するためのソースプログラムを記述できる。3前1,前2
ソフトウェア生成に必要なツールを使い、ソースプログラムをロードモジュールに変換して実行できる。3前1,前2
主要な言語処理プロセッサの種類と特徴を説明できる。2
ソフトウェア開発に利用する標準的なツールの種類と機能を説明できる。2
ソフトウェアアルゴリズムの概念を説明できる。3
与えられたアルゴリズムが問題を解決していく過程を説明できる。3
同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを説明できる。3
時間計算量や領域計算量などによってアルゴリズムを比較・評価できることを理解している。3
整列、探索など、基本的なアルゴリズムについて説明できる。3
コンピュータ内部でデータを表現する方法(データ構造)にはバリエーションがあることを説明できる。3
同一の問題に対し、選択したデータ構造によってアルゴリズムが変化しうることを説明できる。3
リスト構造、スタック、キュー、木構造などの基本的なデータ構造の概念と操作を説明できる。3
分野別の工学実験・実習能力情報系分野【実験・実習能力】情報系【実験・実習】与えられた問題に対してそれを解決するためのソースプログラムを、標準的な開発ツールや開発環境を利用して記述できる。3前2
ソフトウェア生成に利用される標準的なツールや環境を使い、ソースプログラムをロードモジュールに変換して実行できる。3前2
ソフトウェア開発の現場において標準的とされるツールを使い、生成したロードモジュールの動作を確認できる。3前2

評価割合

試験実習課題合計
総合評価割合8020100
基礎的能力000
専門的能力8020100
分野横断的能力000