【 2019 年度 授業概要】
科   目 プログラミングU ( Programming II )
担当教員 (前期)戸崎 哲也 教授,(後期)尾山 匡浩 准教授
対象学年等 電子工学科・3年・通年・必修・2単位 ( 学修単位I )
学習・教育
目標
A3(100%)
授業の概要
と方針
アルゴリズム,データ構造などのプログラミングを実践的な見地から学習する.前期では,C言語の復習とファイル入出力,およびオブジェクト指向型言語であるjava言語について触れる.後期では各種のハードウェアやウェブサービスなどと連携した実用的で発展性のある技術について,各種プログラミング言語を用いて広く紹介する.プログラミングで “何か” を実現する歓びを感じて頂きたい.



1 【A3】 C言語によるプログラミングの基礎を理解できる.
2 【A3】 プログラミングによりファイル入出力操作をすることができる.
3 【A3】 オブジェクト指向型プログラムを理解することができる.
4 【A3】 提示された問題を解決できるようなプログラミングをおこなうことができる.
5  
6  
7  
8  
9  
10  












1 C言語プログラミングの基礎を理解できているかを小テスト,前期中間試験および授業中の演習で評価する.
2 ファイル入出力操作を理解できているかを小テスト,前期中間試験および授業中の演習で評価する.
3 オブジェクト指向型プログラムの特徴であるインスタンス化,コンストラクタ,クラスの継承が理解できているかを前期定期試験および授業中の演習で評価する.
4 プログラミングによる問題解決能力を総合演習,プレゼンテーションとそのレポート,および報告書で評価する.
5  
6  
7  
8  
9  
10  




成績は,試験35% レポート30% 小テスト10% プレゼンテーション10% 総合演習5% プレゼン関係資料10% として評価する.前期中間試験と前期定期試験の平均を試験成績として評価し,これに小テストおよび総合演習を加えたものを前期成績とする.後期はプレゼンテーション(関係資料含む)とレポートで評価する.総合評価は前期成績と後期成績の平均とし,100点満点で60点以上を合格とする.
テキスト 「新C言語入門シニア編」:林晴比古(ソフトバンククリエイティブ)
配布プリント
参考書 「プログラミング言語C ANSI規格準拠」:B.W. カーニハン(共立出版)
「Java言語プログラムレッスン 上下」:結城浩(SBクリエイティブ)
「Raspberry Piをはじめよう 第3版」:Matt Richardson他著,水原文訳(オライリー・ジャパン)
「入門 Python 3」:Bill Lubanovic著,斎藤康毅監修,長尾高弘訳(オライリー・ジャパン)
「プログラマの数学 第2版」:結城浩(SBクリエイティブ)
関連科目 情報基礎,プログラミングI,ソフトウェア工学,数値解析,電子工学実験実習
履修上の
注意事項
本科目では,プログラミングIをさらに実践的なものへと発展させることを目指す.そのため,プログラミングIの内容を十分理解しておく必要がある.加えて,電子工学科におけるプログラミングは電子工学の知識と密接に関わっているので,実験実習などの実習系科目についてもその楽しさを理解しておく必要がある.

【授業計画( プログラミングU )】
上段:テーマ/下段:内容(目標、準備など)
1 C言語の復習1
2年次に学習したC言語の復習を行う.ここでは,標準入出力や四則演算,2進数の計算に必要な論理演算やシフト演算,科学計算に欠かせない算術演算関数について復習する.
2 C言語の復習2
関数と変数についての講義を行う.
3 ポインタ1
C言語では,ポインタを利用してメモリ上のアドレスにアクセスすることができる.ここでは,メモリに割り当てられたポインタ変数がどのような振る舞いを行うかを学び,その使用方法について理解を深める.
4 ポインタ2
配列とポインタ,構造体のポインタ,ポインタのポインタを学習し,その使用方法について理解を深める.
5 ファイル入出力1
プログラミングにおいて,データを読み込んだり,結果を書き出したりする処理は重要である.このような処理ファイル入出力と呼ばれるが,その概要を示す.また,ファイルにはテキストファイルとバイナリファイルが存在するが,ここではテキストファイルを中心にその入出力方法を学ぶ.
6 ファイル入出力2
科学計算を行う上で,バイナリファイル を扱うことは重要である.ここでは,バイナリファイルの入出力に関して学習を行う.
7 演習
ファイル入出力に関する演習を行う.
8 中間試験
1〜7週に関する内容の中間試験
9 試験問題の解答と解説.オブジェクト指向型プログラミングの説明
中間試験問題の解答を示し,その解説をする.その後,オブジェクト指向型プログラミングの説明を行い,手続き型プログラミングとの違いを学習する.また,java言語プログラミングについて理解する.
10 java言語1 クラスとインスタンス
クラスとオブジェクト,オブジェクトの生成方法を講義し,その使い方を理解する.
11 java言語2 コンストラクタ
クラスからオブジェクトをインスタンス化する際,その初期化処理を行うコンストラクタという概念が存在する,その使用方法を学び,理解を深める.
12 java言語3 継承
あるクラスに,新しいメソッドやフィールドを追加して新しいクラスを作ることを継承という.これらの概念を理解し,演習を通して理解を深める.
13 java言語4 ファイル操作と入出力
java言語におけるファイル入出力操作を理解する.
14 java言語演習
java言語に関する演習を行う.
15 定期試験の解答および総合演習
定期試験の返却と問題の解説を行う.また,後期に向けての動機付けを行う.
16 Raspberry Piの環境構築
ARMプロセッサを搭載した低価格シングルボードコンピュータであるRaspberry Pi(以下,RPiと表記)の環境構築をおこなう.また,RPiにはGPIO(汎用の入出力端子)が備わっているが,RPiではコマンドラインから極めて容易にGPIOへアクセスすることができるので,この機能も試す.
17 Raspberry Piを用いたSonicPi入門
RPiではリアルタイムに音楽を“プログラミング”できるSonicPiが動作する.SonicPiでは,事前に演奏情報を入力しておくだけではなく,演奏中にリアルタイムに音色や音量の変更がおこなえるので,これらを体験する.
18 Raspberry Piを用いたMathematica入門
RPiの標準OSであるRaspbianには高度な数式処理や美しい可視化などが容易におこなえるMathematicaが無償で付属している.数学のみならず,その他の講義や実験等で扱う事象の理解にも有用であると考えられるので,基本的な使い方を講義する.
19 演習
16週目から18週目の内容に関する演習を行う.
20 Raspberry Piを用いたPython入門1
各分野で幅広く用いられているスクリプト言語であるPython3を紹介する.Pythonは実行速度は遅いものの各種ライブラリが充実しており,様々な高度な機能を短期間で開発することができる.第1週目はGPIO端子を扱う簡単なプログラムを記述し,ハードウェアがソフトウェアから容易に扱えることを実感する.
21 Raspberry Piを用いたPython入門2
第2週目はPython言語の基本を学ぶ.特徴的なインデントの書き方や変数や配列の扱い,ifやforなどの制御構造について解説するとともに,数学・科学・工学に特化したライブラリであるSciPyを用いる方法についても紹介する.
22 Raspberry Piを用いたPython入門3
Pythonは様々なライブラリが充実しており,その使いこなしが重要である.ここではそのライブラリの紹介と使い方について講義する.
23 演習
20週目から22週目の内容に関する演習を行う.
24 Raspberry Piを用いたWebサーバ構築
RaspbianはDebianをベースにしたLinuxであるので,ウェブサーバ等の構築も容易である.ここでは,Apache2を用いてウェブサーバ構築について体験する.
25 Raspberry Piを用いた並列計算入門
RPiは安価なシングルボードコンピュータでありながら比較的高速なマルチコアCPUが搭載されており,容易に並列演算をおこなえるようになっている.ここでは,C言語で書いたコードをOpenMPを用いて極めて簡便に並列化する手法について解説する.加えて,最適化コンパイルの方法とその効果についても確認する.
26 演習
24週目および25週目の内容に関する演習を行う.
27 自由課題 1
前週までに学習した内容に基づき,各自が希望する自由課題に取り組む.使用言語や内容は自由である.本講義で紹介していない言語でも差し支えない.PRiを使わないソフトウェアのみの開発,外部のハードウェアやオンラインサービス等と連携するものや,RPiのハードウェアそのものの可能性を追求するものなどでもよい.
28 自由課題 2
前週に引き続き自由課題に取り組む.
29 プレゼンテーション
自由課題についてのプレゼンテーションをおこなう(一人2分程度).
30 総括
この講義の総括をおこなうとともに,講義中に紹介しきれなかった事例や今後の発展などについて述べる.


前期中間試験および前期定期試験を実施する.後期は試験を実施せず,かわりにプレゼンテーションおよびレポートで評価する.