61
コンピュータ基礎と プログラミング (第四回) 雅智 [email protected] 2010秋学期 1

コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 2: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

先週の復習&課題解答

2

Page 3: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

どんなソースコードを書くべきか?

• ソースコードにはロジックそのものが書かれている

• いつも自分の書いたソースコードを読むとは限らない

• 自分の書いたソースでも,1ヶ月前に書いたコードは他人のコード

• ~~~の高いコードを書くことが大事!

3

Page 4: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

どんなソースコードを書くべきか?

• ソースコードにはロジックそのものが書かれている

• いつも自分の書いたソースコードを読むとは限らない

• 自分の書いたソースでも,1ヶ月前に書いたコードは他人のコード

• 可読性の高いコードを書くことが大事!

4

Page 5: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

可読性のためのテクニック• 一般に,if文などで中括弧{}が出てきた時には~~~を行うのが主流

before after プログラムの構造が分かりやすくなる

5

Page 6: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

可読性のためのインデント• 一般に,if文などで中括弧{}が出てきた時にはインデント(字下げ)を行うのが主流

before after プログラムの構造が分かりやすくなる

6

Page 7: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

可読性のための命名規則

• ~~~には意味のある名前をつける

before after変数の中身が想像できるようになる

7

Page 8: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

可読性のための変数名• 変数名には意味のある名前をつける

before after変数の中身が想像できるようになる

8

Page 9: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

可読性のまとめ

• 中括弧{}でインデントする

• 変数名はきちんとつける

• aとかbはできるだけ避ける(特に長いプログラムになる場合)

プログラムが大規模になればなるほど大事9

Page 10: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

プログラムの制御• プログラムの基本的な構成

• ~~

• プログラムに書かれた順に実行していく

• ~~

• ある条件が成り立つとき処理Aを実行し,そうでなければ処理Bを実行する

• ~~

• ある条件を満たしている間処理を繰り返す.条件を満たさなくなった時点で繰り返しをやめる

10

Page 11: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

プログラムの制御• プログラムの基本的な構成

• 順次

• プログラムに書かれた順に実行していく

• 分岐

• ある条件が成り立つとき処理Aを実行し,そうでなければ処理Bを実行する

• 反復

• ある条件を満たしている間処理を繰り返す.条件を満たさなくなった時点で繰り返しをやめる

11

Page 12: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

whileによる繰り返し• while(条件式){ 処理 }で,~~~の評価結果が~~の間処理を繰り返す事ができる

• 処理順序

1. 条件式の評価を行う

2. もし1の値がtrueなら処理を実行.実行後1に戻る

3. 1の値がfalseの時,処理を実行せず次の文へ進む

12

Page 13: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

whileによる繰り返し• while(条件式){ 処理 }で,条件式の評価結果がtrueの間処理を繰り返す事ができる

• 処理順序

1. 条件式の評価を行う

2. もし1の値がtrueなら処理を実行.実行後1に戻る

3. 1の値がfalseの時,処理を実行せず次の文へ進む

13

Page 14: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

指定回数の繰り返し

• 「焼肉食べたい」と10回言ってみて

• 指で回数を数えた人?

• 頭の中で回数を数えた人?

• それが「~~(~~)」という概念

14

Page 15: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

指定回数の繰り返し• 「焼肉食べたい」と10回言ってみて

• 指で回数を数えた人?

• 頭の中で回数を数えた人?

• それが「カウンタ(counter)」という概念

15

Page 16: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

whileによる繰り返し

• 概念的にはこういうこと

16

それぞれの行をソースコードにしていく

Page 17: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

whileによる繰り返し

• ソースコードに直すとこうなる

17

Page 18: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

注意:無限ループ• ~~~~~となる様なコードを書くと,無限ループが発生する

• プログラムがずっと全力で動作し続け,止まらなくなる

• プログラムが暴走して操作を受け付けなくなる

iが常に0以上のため無限ループとなる18

Page 19: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

注意:無限ループ• whileの条件式が常にtrueとなる様なコードを書くと,無限ループが発生する

• プログラムがずっと全力で動作し続け,止まらなくなる

• プログラムが暴走して操作を受け付けなくなる

iが常に0以上のため無限ループとなる19

Page 20: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

無限ループ時の対処• for Windows

1. Ctrl + Alt + Deleteを押して「タスクマネージャ」を起動

2. 「プロセス」タブでCPU使用率順に並べ替え,暴走しているjavaw.exe及びjava.exeを強制終了する

• for Mac

1. DockのProcessingアイコンを右クリック(or Ctrl+クリック)

2. 「終了」を選択すると,プログラムと一緒に終了する

20

Page 21: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

繰り返し条件の注意• それぞれ何回繰り返すか?

21

Page 22: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

繰り返し条件の注意• 油断していると境界値を間違えやすいので注意

0から9までで10回 0から10までで11回

22

Page 23: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

条件式色々• それぞれ何回繰り返すか?

手元で書いて確かめてもOK

23

Page 24: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

先週の課題• 1つ目から20個目までのフィボナッチ数列を計算し,表示せよ

• ※フィボナッチ数列とは,前二つの数の和が次の項になる数列(0, 1, 1, 2, 3, 5, 8, ...)

• 詳細はググって調べて下さい

• フィボナッチ数列で最初に100000以上になるのは何番目の数か.またその数を求めよ

24

Page 25: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

一問目の戦略• フィボナッチ数について(N番目のフィボナッチ数を考える)

• N == 1の時,0

• N == 2の時,1

• N > 2の時,Nはひとつ前と二つ前の数の和

• N <= 2の時はそれぞれ決まった値を出し,それ以上の数の場合,計算によって求める

25

Page 26: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

この時点でのソースコード• N == 0, N == 1の時は自明なので,書けるところから書いていく

26

Page 27: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

N > 2の時の戦略• いきなりプログラムを書こうとしてはいけない• ハマります

• まずはある程度手計算してみて,計算の傾向を洗い出す

• この時,なるべく図で計算ロジックが分かるようにすると分かりやすい

27

Page 28: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

N > 2のフィボナッチ数

+

+

1.ひとつ前の行のbefore1を参照し,before2にコピー

2.ひとつ前の行のcurrentを参照し,before1にコピー

3.before2 + before1をcurrentにコピー

current: N番目のフィボナッチ数before1: N - 1番目のフィボナッチ数before2: N - 2番目のフィボナッチ数

current, before1, before2の三つの変数が必要

28

Page 29: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

N == 3の時のフィボナッチ数

使う変数を宣言,初期化

N==1の時,currentは0固定

N==2の時,currentは1固定before1を忘れずに更新する

N==3の時,before2, before1を更新し,

before2 + before1をcurrentに代入

29

Page 30: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

次なる戦略• N == 3のプログラムが出来たので,引き続きN == 4から先も書いてみる

•まだ繰り返しにはしない

•急がず,一手ずつ,確実に

30

Page 31: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

N == 3からN == 6まで(前略)

N==3の時,before2, before1を更新し,

before2 + before1をcurrentに代入

N==4の時,before2, before1を更新し,

before2 + before1をcurrentに代入

N==5の時,before2, before1を更新し,

before2 + before1をcurrentに代入

N==6の時,before2, before1を更新し,

before2 + before1をcurrentに代入31

Page 32: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

繰り返しの検討• いくつか書いてみたので,以下の手順で繰り返し処理を検討する

• 同じような処理が行われているか?

• 違う部分があれば,どこがどう違うか?

• その値は何によって定まるか?変数を用いて表現できるか?

32

Page 33: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

比較

赤枠で囲った部分以外は全く同じまた,赤枠部分はNの値そのものである

N > 2の時,同じ処理の繰り返しで表現することができそう

33

Page 34: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

繰り返し条件• まずは繰り返し条件を検討する• Nは3から20まで

34

Page 35: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

とりあえず当てはめ

このままだと

計算結果は良さそうだが,すべて「N=3の時」になってしまう

→変数に置き換える

(N=1, N=2の時は省略)

35

Page 36: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

最終版

1つ目から20個目までのフィボナッチ数36

Page 37: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

二問目の戦略• 最初に100000以上になる時の値を求める

• →100000以上になったら繰り返ししないとすれば,その時のcurrentが求める値

フィボナッチ数を求める部分は変えないのが大事

37

Page 38: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

二問目解答

currentが100000を超えたら繰り返しを止めたいので,currentが100000より小さい時に繰り返す

繰り返しを抜ける前にNの値は1進められてしまっているので,表示するNの値は-1する

38

Page 39: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

今週の内容

39

Page 40: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

Agenda

• SFCLib環境のインストール

• 繰り返し・二重の繰り返し再び

• いくつかの便利知識・テクニックを詳解

40

Page 41: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

SFCLibのインストール• Processingの環境設定の「Sketchbook location」フォルダ内に「libraries」

フォルダを作成

• libraries内に以下のURLからダウンロードしたsfclib.zipを解凍する

• http://www.ht.sfc.keio.ac.jp/~morimori/compro10f/sfclib.zip

41

Page 42: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

SFCLibの動作テスト• Processingを再起動した後,以下のソースコードを書いて実行してみる

42

Page 43: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

SFCLibとは• コンピュータ基礎とプログラミングの授業で使われているライブラリ

• ライブラリ: よく使われる様な機能をまとめた便利プログラム集

• 期末試験でも使われるので,やっておきます

• できること

• N * Nの四角形を画面上に配置し,それぞれの色を任意に変化させることが出来る

43

Page 44: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

SFCLibの座標系• 左上が(0, 0),右下が(9, 9)になる

(0, 0) (9, 0)

(9, 9)(0, 9)

44

Page 45: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

Processing版SFCLibの使い方• C/C++版と違うので注意

SFCLibを使うための宣言

void setup(){}の中括弧内に以下の設定を記述ウィンドウサイズを280pixel * 280 pixelに設定(変更可能)Processingに一度だけ描画するように指定(気にしなくて良い)

void draw(){}の中括弧内にプログラムを記述最初にlib.sfcInit()を指定するその後,プログラムを書き始める

45

Page 46: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

SFCLib使用例

この行を追加

46

Page 47: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

SFCLibの命令• lib.sfcInit()

• 10 * 10個の四角形を描画する.最初に一回だけ呼ぶこと

• lib.sfcPoint(x, y)

• x, yの座標に黒点を描画する

• lib.sfcPoint(x, y, color)

• x, yの座標に以下のカラーコードに従ったcolorで点を描画する

0: black1: blue2: green3: cyan4: red5: magenta6: yellow7: white47

Page 48: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

演習:SFCLibに慣れる• 以下の図を描画せよ

その1 その248

Page 49: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

演習:繰り返し• 繰り返しを使って以下の図を描画せよ

その1 その2 その3

49

Page 50: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

演習:二重の繰り返し• 二重の繰り返しを使って以下の図を描画せよ

その1 その2 その3

50

Page 51: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

今週の課題その1

• 以下の図を描画するプログラムを作成せよ• ヒント: カラーコード表の数値に着目

• 設計図も添付すること0: black1: blue2: green3: cyan4: red5: magenta6: yellow7: white

51

Page 52: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

設計図について• フリーフォーマット

• 紙に書いて写真に撮っても,Word等のファイルに書いても良い

• 必ず書くこと

• 自分の考えた戦略

• 問題をどう分割したか?自分なりの解釈など

• 試行錯誤の過程

• 失敗して,やり直した部分も入れる

• できれば後でなぜその戦略がダメだったのかも書く

配点の半分はここで付けます!!

Page 53: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

繰り返しの制御• 要求その一

• 以下の図を描画するプログラムを作成せよ

53

Page 54: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

continue文• 実行している繰り返し処理を強制的にスキップし,繰り返し条件式の評価に処理を飛ばす

i == 4の時だけこの先を実行しない

54

Page 55: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

繰り返しの制御(2)

55

• 要求その二

• 以下の図を描画するプログラムを作成せよ

Page 56: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

break文• 実行している繰り返し処理を条件式に関わらず強制的に脱出する

i == 4の時に繰り返しを止める

56

Page 57: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

continue, break文について• 使わなくてもフラグ変数とif文を使うことで同等のことは出来る

• しかし,多くの場合ifの入れ子構造を浅くする事ができる

• →可読性が上がり,読みやすくなる使えば常に見やすくなるわけではないので,

必要なときにのみ使うこと57

Page 58: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

まとめ• これまでの内容で順次,反復(while),分岐

(if-else)の全てを扱った

• これらはプログラミング言語C/C++,

Processingの構文の基礎であり,他の言語でも同じように応用できる

• すごく大事なので,必ずマスターしておくこと

58

Page 59: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

とはいっても• これまでの内容だけだと表現し辛かったり,読みにくい・冗長になってしまうことがある

• ここから先はプログラミングを便利にする機能を解説

• とはいっても事実上必須の知識• 論理的にプログラミング言語の知識を身につけていきましょう

59

Page 60: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

便利な演算子• インクリメント(デクリメント)演算子++(--)

• 「i++(i--)」はiに1を足す(引く)

• 単体で使ったときは「i = i + 1(i = i - 1)」と同じ意味

• 乗算**,除算//は無いので注意

• 複合代入演算子 +=, -=, *=, /=, %=

• 「i += n」は「i = i + n」と同じ意味(他も同じ)

慣れてきたら使うと便利60

Page 61: コンピュータ基礎と プログラミング (第四回)morimori/compro10f/... · どんなソースコードを書くべきか? • ソースコードにはロジックそのものが書かれて

今週の課題その2

• SFCLibを使って自由に絵を書きなさい.

• ドット絵,模様など,何を書くかはセンスに任せます

61