1 / 30

プログラミング Ⅱ  第2回

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

dinos
Download Presentation

プログラミング Ⅱ  第2回

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. プログラミングⅡ 第2回 第1回(プログラミングⅠの復習) の解説

  2. プログラムの作り方 いきなり完全版を作るのではなく,だんだんふくらませていきます.

  3. プログラムの作り方 いきなり完全版を作るのではなく,だんだんふくらませていく.

  4. プログラムの作り方 いきなり完全版を作るのではなく,だんだんふくらませていく.

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

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

  7. 盤のデータ構造 今回は1次元配列を使うことにします. 盤の枡を指す番号は 1~9 で,integer 型のほんの一部に過ぎません. 一部の範囲だけを動くデータのために,固有の型名をつけると,わかりやすくなります. type TBangou = 1..9; これを部分範囲型といいます.

  8. 盤のデータ構造 から 盤の枡の状態は,空,○,×の3つあります.  それぞれを 0,1,2 で表すことにして type TYouso = 0..2; としてもよいのですが, 名前で表すとわかりやすくなります. type TYouso = (Kara,Maru,Batu); これを列挙型といいます.

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

  10. 盤の表示 枠の線を +-|を使って書きます. +-+-+-+  1行目 | |×| |  2行目 +-+-+-+  3行目 | |○| |  4行目 +-+-+-+  5行目 |○| | |  6行目 +-+-+-+  7行目

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

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

  13. 盤の表示 3枡書いたら右の線を書いて改行するようにします. for N := 1 to 9 do begin Write(‘|’); YousoWoKaku(N); if N mod 3 = 0 then WriteLn(‘|’); end; 実行すると | |×| | | |○| | |○| | |

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

  15. 要素を書く 要素は3種類あるので,場合分け(case分岐)を使います. case Ban[N] of Kara : Write(‘ ’); Maru : Write(‘○’); Batu : Write(‘×’); end;

  16. どこに置くか 手番のプレイヤーに,どこに置くか訊きます. 正しい番号を入れるまで,繰り返し訊かないといけません.

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

  18. どこに置くか 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] ?

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

  20. 集合を使うと便利 「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] と簡潔でわかりやすくなります.

  21. 集合を使うと便利 「M月とN月が両方とも大の月か」を 不等式で書くと,とても長くなります. 集合で書くと [M,N] <= [1,3,5,7,8,10,12] と簡単です. これは,数学での式 {M,N}⊆{1,3,5,7,8,10,12} と同じ意味です.

  22. 繰り返しの条件 • 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ループでは継続条件を書きます. ちょうど反対(否定)になります.

  23. ゲームの終了条件 とりあえず,勝敗は気にしないで,すべての 枡が埋まるまで(9手)続けるとします. Tesuu := 0; repeat Inc(Tesuu); // Tesuu := Tesuu+1; と同じ ~ until Tesuu = 9;

  24. Boolean(論理値) 次のプログラムを実行してみてください. var Tesuu : Integer; begin {Main} Tesuu := 0; repeat Inc(Tesuu); WriteLn(Tesuu:2, (Tesuu=9):6); until Tesuu=9; ReadLn; end.

  25. Boolean(論理値) Tesuu の値は 1 2 … 9 で,整数値(Integer)です. Tesuu=9 の値は 9=1 9=2 … 9=9 すなわち False False … True で,論理値(Boolean)です. 実行しましたか.

  26. ゲームの終了条件 勝敗は,今○か×を置いたことによって,それが3つ並んだら「勝った」とわかります. 変数 Katta : Boolean を使うことにします. Tesuu := 0; repeat Inc(Tesuu); ~ Katta := Naranda(Basyo); until(Tesuu = 9) or Katta;

  27. ゲームの終了条件 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;

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

  29. 問題 procedure TebanKoutai(var Player : TPlayer); は case分岐を使っていますが,二分岐なので if分岐でも書けます. if分岐に書き換えてください.

  30. 問題  盤の線を罫線(┌ ─ など)を使うともっときれいに書けます. ┌─┬─┬─┐  1行目 | |×| |  2行目 ├─┼─┼─┤  3行目 | |○| |  4行目 ├─┼─┼─┤  5行目 |○| | |  6行目 └─┴─┴─┘  7行目 罫線を使うように改良してください. 「けいせん」を変換していろいろな線が選べます. 7行目が3,5行目と異なるので,ちょっと工夫しないといけません.

More Related