30
プププププププ プププププププ ププププ 1() プププ

プログラミング Ⅱ  第2回

  • Upload
    dinos

  • View
    34

  • Download
    1

Embed Size (px)

DESCRIPTION

プログラミング Ⅱ  第2回. 第1回(プログラミング Ⅰ の復習) の解説. プログラムの作り方. いきなり完全版を作るのではなく,だんだんふくらませていきます.. プログラムの作り方. いきなり完全版を作るのではなく,だんだんふくらませていく.. プログラムの作り方. いきなり完全版を作るのではなく,だんだんふくらませていく.. 盤のデータ構造. 2次元配列 で表す場合 type TBan = array [1..3,1..3] of ~ ;. 盤のデータ構造. 1次元配列 で表す場合 - PowerPoint PPT Presentation

Citation preview

Page 1: プログラミング Ⅱ  第2回

プログラミングⅡ 第2回

第1回(プログラミングⅠの復習)

の解説

Page 2: プログラミング Ⅱ  第2回

プログラムの作り方いきなり完全版を作るのではなく,だんだ

んふくらませていきます.

TicTacToe1

Page 3: プログラミング Ⅱ  第2回

プログラムの作り方いきなり完全版を作るのではなく,だんだ

んふくらませていく.

TicTacToe1

TicTacToe2

Page 4: プログラミング Ⅱ  第2回

プログラムの作り方いきなり完全版を作るのではなく,だんだ

んふくらませていく.

TicTacToe1

TicTacToe2

TicTacToe3

Page 5: プログラミング Ⅱ  第2回

盤のデータ構造2次元配列で表す場合type TBan = array [1..3,1..3] of ~ ;

1,1 1,2 1,3

2,1 2,2 2,3

3,1 3,2 3,3

Page 6: プログラミング Ⅱ  第2回

盤のデータ構造1次元配列で表す場合type TBan = array [1..9] of ~ ;

1 2 3

4 5 6

7 8 9

Page 7: プログラミング Ⅱ  第2回

盤のデータ構造今回は1次元配列を使うことにします.盤の枡を指す番号は 1 ~ 9 で, integer 型

のほんの一部に過ぎません.一部の範囲だけを動くデータのために,固有

の型名をつけると,わかりやすくなります.type TBangou = 1..9;これを部分範囲型といいます.

Page 8: プログラミング Ⅱ  第2回

盤のデータ構造                           から

盤の枡の状態は,空,○, × の3つあります. 

それぞれを 0,1,2 で表すことにしてtype TYouso = 0..2;としてもよいのですが,名前で表すとわかりやすくなります.type TYouso = (Kara,Maru,Batu);これを列挙型といいます.

Page 9: プログラミング Ⅱ  第2回

盤のデータ構造合わせて次のようになります.type TBangou = 1..9; TYouso = (Kara,Maru,Batu); TBan = array [TBangou] of TYouso;var Ban : TBan;

Page 10: プログラミング Ⅱ  第2回

盤の表示枠の線を +-|を使って書きます.

+-+-+-+  1行目| | × | |  2行目+-+-+-+  3行目| |○| |  4行目+-+-+-+  5行目|○| | |  6行目+-+-+-+  7行目

Page 11: プログラミング Ⅱ  第2回

盤の表示9つの空の枡を一直線に書くのは簡単です.for N := 1 to 9 do begin   Write(‘ |’ ); // 左の線 Write(‘  ’ ); end;WriteLn(‘ |’ ); // 最後の線

実行すると| | | | | | | | | |

Page 12: プログラミング Ⅱ  第2回

盤の表示空白の代わりにN番目の要素を書くようにします.for N := 1 to 9 do begin   Write(‘ |’ ); YousoWoKaku(N); end;WriteLn(‘ |’ );

実行すると| | ×| | |○| |○| | |

Page 13: プログラミング Ⅱ  第2回

盤の表示3枡書いたら右の線を書いて改

行するようにします.for N := 1 to 9 do begin   Write(‘ |’ ); YousoWoKaku(N);

if N mod 3 = 0 then WriteLn(‘ |’ ); end;

実行すると

| | ×| || |○| ||○| | |

Page 14: プログラミング Ⅱ  第2回

盤の表示横の線を書くようにします.WriteLn(‘ +-+-+-+’ ); for N := 1 to 9 do begin    Write(‘ |’ ); YousoWoKaku(N); if N mod 3 = 0 then begin WriteLn(‘ |’ ); WriteLn(‘ +-+-+-+’ ); end; end;

実行すると+-+-+-+| | ×| |

+-+-+-+| |○| |+-+-+-+|○| | |+-+-+-+

Page 15: プログラミング Ⅱ  第2回

要素を書く要素は3種類あるので,場合分け( case 分

岐)を使います.case Ban[N] of Kara : Write(‘  ’ ); Maru : Write(‘○’); Batu : Write(‘×’);end;

Page 16: プログラミング Ⅱ  第2回

どこに置くか手番のプレイヤーに,どこに置くか訊きま

す.正しい番号を入れるまで,繰り返し訊かな

いといけません.

Page 17: プログラミング Ⅱ  第2回

どこに置くかrepeatループを使った例repeat Write(‘ どこに置きますか [1 ~ 9] ? ’); ReadLn(N);until (N in [1..9]) and (Ban[N] = Kara); Result := N;

実行するとどこに置きますか [1~ 9] ? 0どこに置きますか [1~ 9] ?

Page 18: プログラミング Ⅱ  第2回

どこに置くかwhileループを使った例Write(‘ どこに置きますか [1 ~ 9] ? ’);ReadLn(N);while not (N in [1..9]) or (Ban[N] <> Kara) do begin WriteLn(‘ そこは置けません’ ); Write(‘ どこに置きますか [1 ~ 9] ? ’); ReadLn(N); end;Result := N;

実行するとどこに置きますか [1~ 9] ?  0そこは置けませんどこに置きますか [1~ 9] ?

Page 19: プログラミング Ⅱ  第2回

集合を使うと便利整数Nが 1~9 の数であるかの判定.不等式を使うと (1 <= N) and (N <= 9)集合を使うと N in [1..9]これは,数学での式 N ∈ { 1,2,3,4,5,6,7,8,9 }と同じ意味です.

Page 20: プログラミング Ⅱ  第2回

集合を使うと便利「M月が大の月( 31 日まである月)か」を不等式で書くと (M=1) or (M=3) or (M=5) or (M=7) or (M=8) or (M=10) or (M=12)

ですが,集合で書くと M in [1,3,5,7,8,10,12]

と簡潔でわかりやすくなります.

Page 21: プログラミング Ⅱ  第2回

集合を使うと便利「M月とN月が両方とも大の月か」を不等式で書くと,とても長くなります.集合で書くと [M,N] <= [1,3,5,7,8,10,12]

と簡単です.これは,数学での式 {M,N}⊆{1,3,5,7,8,10,12}

と同じ意味です.

Page 22: プログラミング Ⅱ  第2回

繰り返しの条件

repeat ~ until (N in [1..9]) and (Ban[N] = Kara);

while not (N in [1..9]) or (Ban[N] <> Kara) do begin ~ end;

repeatループでは終了条件を書き,whileループでは継続条件を書きます.ちょうど反対(否定)になります.

Page 23: プログラミング Ⅱ  第2回

ゲームの終了条件とりあえず,勝敗は気にしないで,すべて

の枡が埋まるまで(9手)続けるとします. Tesuu := 0; repeat Inc(Tesuu); // Tesuu := Tesuu+1; と同じ ~ until Tesuu = 9;

Page 24: プログラミング Ⅱ  第2回

Boolean(論理値)次のプログラムを実行してみてください.

var Tesuu : Integer; begin {Main} Tesuu := 0; repeat Inc(Tesuu); WriteLn(Tesuu:2, (Tesuu=9):6); until Tesuu=9; ReadLn; end.

Page 25: プログラミング Ⅱ  第2回

Boolean(論理値)

Tesuu の値は 1 2 … 9

で,整数値( Integer)です.

Tesuu=9 の値は  9=1 9=2 … 9=9

すなわち False False … True

で,論理値( Boolean )です.

実行しましたか.

Page 26: プログラミング Ⅱ  第2回

ゲームの終了条件勝敗は,今○か × を置いたことによって,

それが3つ並んだら「勝った」とわかります.

変数 Katta : Boolean を使うことにします. Tesuu := 0; repeat Inc(Tesuu); ~ Katta := Naranda(Basyo); until (Tesuu = 9) or Katta;

Page 27: プログラミング Ⅱ  第2回

ゲームの終了条件function Naranda(N : TBangou) : Boolean;は,今 Ban[N] に○か × を置いたところで,

それが3つ並んだか調べる論理値関数です.N によって並ぶ筋が異なるので場合分けして

調べます.case N of 1 : Onaji(1,2,3) or Onaji(1,4,7) or Onaji(1,5,9); ~end;

Page 28: プログラミング Ⅱ  第2回

ゲームの終了条件関数 Naranda を完成させてください.

Page 29: プログラミング Ⅱ  第2回

問題procedure TebanKoutai(var Player : TPlayer);

は case分岐を使っていますが,二分岐なので

if 分岐でも書けます.if 分岐に書き換えてください.

Page 30: プログラミング Ⅱ  第2回

問題 盤の線を罫線(┌ ─ など)を使うともっとき

れいに書けます.┌─┬─┬─┐  1行目| | × | |  2行目├─┼─┼─┤  3行目| |○| |  4行目├─┼─┼─┤  5行目|○| | |  6行目└─┴─┴─┘  7行目

罫線を使うように改良してください.「けいせん」を変換していろいろな線が選べます.7行目が3,5行目と異なるので,ちょっと工夫し

ないといけません.