情報処理II

情報処理Ⅱ
第1回
2007年10月1日(月)
情報処理Ⅱについて


担当は村川猛彦([email protected])
「プログラミング基礎Ⅱ」(松田先生)と連携して実施





演習の疑問や誤解を講義で解説し,
講義で紹介する技法を演習で活用する.
成績評価は別々.
目標:「情報処理Ⅱ」および「プログラミング基礎Ⅱ」を通じて,
Cで数十行程度のプログラムが自在に作成できるようになる
こと.
予習は不要.復習は毎回してください.
2
成績評価の方法


レポート:10点満点×2回
期末試験:80点満点


自筆ノート1冊の持ち込みを認める.
毎回授業中に実施する小テスト(アンケートのことも)は,成
績に加味しない.しかし,受けるのと受けないのでは期末試
験で大きく差が開くので,毎回出席することを期待する.
3
教科書について

村山公保, 『Cプログラミング入門以前』,毎日コミュニケー
ションズ, ISBN4839920648




プログラミング基礎Ⅰの教科書
基礎重視
スライドでは 入p.???
内田智史ほか, 『C言語によるプログラミング-スーパーリ
ファレンス編-』,オーム社, ISBN4274063372


規格の解説書
スライドでは リp.???
4
休講と補講について

月曜で授業なしの日




10月8日…体育の日
11月12日…大学祭関連
月曜だけだと,試験期間前には12回しか授業ができない!
補講・代替授業


11月26日(月)1限
• この日は1~2限に連続して授業をする
1月30日(水)2限
5
他の科目との関連
セメ
スター
科目
内容
目標
1
情報処理Ⅰ
プログラミング基礎Ⅰ
リテラシー
プログラミングの入門
計算機に慣れる
2
情報処理Ⅱ
プログラミング基礎Ⅱ
プログラミングとCの基礎(講義)
プログラミングとCの基礎(演習)
プログラミング
を学ぶ
3
アルゴリズム演習Ⅰ
プログラミングとCの基礎(演習)
Cで自在に
プログラミング
4
情報処理Ⅲ
情報ネットワーク演習
Java,OOP
通信
ライブラリの活用
5
ビジュアル情報演習
2D, 3D画像処理
6
情報通信システム演習
7 ~ 卒業研究
研究室配属.研究テーマに応じたプログラム作成
6
プログラミングにまつわる用語

プログラミング(programming)


プログラム(program)



プログラムを作ること
「実行ファイル」「バイナリ」
とも呼ばれる
プログラミングの結果,作られたファイル
実行可能なファイルを作って計算機に渡すことで,プログラム
の指示通りに動作する.
• Cのファイルは実行可能ではなく(ソースファイルと呼ばれ
る),コンパイラを用いて,実行可能なファイルに変換する.
コマンド(command)

計算機に何をしてもらうか指示すること
7
プログラミングの順序
目的・アイデア
プログラミング
(テキストエディタ)
(Cなどで書いた)
ソースファイル
コンパイル
(コンパイラ)
実行
実行ファイル
入p.121
エラー
失敗…
成功!
8
なぜプログラミングをするのか?

高速・高精度が要求される処理が可能




ロボット,車,原子炉などの「制御」
データの「整理整頓」,整形出力など
他の計算機・プロセス・デバイスとの「通信」
問題解決に要する時間を短縮


それは,自分がすべき仕事か?
それは,計算機に向いた仕事か?
9
なぜC?(1)

有名なプログラミング言語








C,C++
Java ⇒「情報処理Ⅲ」「オブジェクト指向」で
非手続き型言語: Lisp,Prolog,Erlang,SQL
Lightweight Language: Perl,PHP,Python,Ruby
Pascal,Fortran,COBOL,BASIC,PL/Ⅰ,ALGOL
JavaScript (JScript, ECMAScript)
シェルスクリプト,バッチファイル
アセンブリ言語
10
なぜC?(2)


普及しているプログラミング言語
適度に高級,適度に低級




他のプログラミング言語の習得に役立つ


入p.43
高級(高水準):人間が読み書きしやすい.
低級(低水準):計算機向けの記述がしやすい.
プログラミング言語や使用者の優劣ではない.
実用的な多くのプログラミング言語が,Cの影響を受けて設計
された.
Cは,プログラミング言語の世界の「英語」のようなもの!
11
情報処理Ⅱで学んでほしいこと

Cプログラミングにおける技法や文法









型,式,演算子
制御文
配列とポインタ,多次元配列,文字列
識別子,変数,関数,再帰
構造体
入出力
基本的なライブラリ関数
有用なツール
していいこと,してはいけないことの区別
12
コラッツの問題(1)

ルール




上のルールを繰り返すことで,どんな正整数もやがては1に
なる.
例



奇数ならば,3倍して1を加える.
偶数ならば,2で割る.
正整数…1以上の整数
非負整数…0以上の整数
「自然数」は使わない.
5 ⇒ 16 ⇒ 8 ⇒ 4 ⇒ 2 ⇒ 1
3 ⇒ 10 ⇒ 5 ⇒ (上を利用) ⇒ 1
具体的な正整数が与えられれば,それが正しいことを検証で
きる.

任意の正整数で成り立つことの証明は,なされていない.
13
コラッツの問題(2)

コラッツの問題の検証プログラムを作ろう!



テキストエディタ(Emacs)でソースファイルを作り,保存する(こ
こではcollatz.cというファイル名にする).
ターミナル(GNOME端末など)で「cc collatz.c」を実行する.
コンパイルが成功すれば,a.outという実行ファイルができる.
続いてターミナルで「./a.out」を実行する.
Webで参照可能.
復習に役立てて
ください.
collatz.c
14
プログラムの読み方(1)


入p.75
Cプログラムの骨格
#include <stdio.h>
int main(void)
{
...
return 0;
}
①インクルード文
②メイン関数の宣言
③ブロック開始
④処理
⑤メイン関数の終了
⑥ブロック終了
読み方
 stdio.h … スタンダード・アイ・オー・ドット・ヘッダ
 int … イント
15
プログラムの読み方(2)

内部で何をしているのか?




while文
最初に,値を変数xに格納する.
変数xの値は,ルールの適用により変わっていく.
xが1なら,計算終了!(xが1でない間は,ずっと繰り返す.)
xが奇数なら,3x+1を計算し,これを新しいxの値とする.
xが偶数なら,x/2を計算し,これを新しいxの値とする.
• 「偶数か奇数か」は,2で割った余りが0か1かで判定する.
if (x % 2 == 1)
16
プログラムの読み方(3)

printf("%d\n", x);



printf("%d / 2 => %d\n", x, x / 2);



入p.83
x=10のとき,「10 / 2 => 5」を出力する.
x=16のとき,「16 / 2 => 8」を出力する.
printf("OK\n");


x=3のとき,「3」を出力する(画面に「3」が表示される).
x=5のとき,「5」を出力する.
変数の値に関係なく,「OK」を出力する.
「\n」は改行文字
17
まとめ



半年かけて,Cプログラミングの技法や文法を学ぼう!
ソースファイルを作るのはテキストエディタ,
そこから実行ファイルを作るのはコンパイラ.
単純な計算は,Cでも単純に記述できる.
使用する記号に注意.
18