【STAY HOME 応援企画】LibreLogo のくりかえしと条件分岐じょうけんぶんき

< 最終更新日時: 2023-12-07 >

くりかえ回数かいすう条件分岐じょうけんぶんきを使ってみよう 🔰

前回ぜんかい楕円だえんえがくプログラム例では,外枠そとわくとして正方形せいほうけいを描いているのに REPEAT 命令のくり返しが 2 回になっていておかしいとかんじるひともいるかもしれません. 1 つめのかどと 3 つめの角に来たときだけ ELLIPSE 命令を使うことができるなら,ほかの例とおなじように REPEAT 命令のくり返しを 4 回にして 4 本の直線ちょくせんを引くことがはっきりつたわるプログラムにできそうです.

REPEAT 命令の [] の中で,現在げんざいのくり返し回数を調しらべるには REPCOUNT を使います※1今回こんかいREPCOUNT奇数きすう となるときに,ELLIPSE 命令を実行するようにすればよさそうです. あるかずが奇数か偶数ぐうすうかを判定はんていするには,2 でったときのあまりが 1 となるか 0 となるかを調べるとよさそうです. 余りは % を使うと求めることができます※2. 条件がっているときだけ命令を実行するには,IF ぶん を使います. これらをわせると楕円を描くプログラム例は,次のようになおすことができます※3

REPEAT 4 [
  IF REPCOUNT%2 = 1 [ ELLIPSE [200, 200, 0h, 3h, 2] ]  ;  くり返し回数が奇数のときだけ実行
  FD 100
  RT 90
]

条件が成り立っているときと,成り立っていないときでことなる命令を実行することもできます. 次のプログラムの動作を確かめて,なぜそのような図形が描かれるのか考えてみてください.

:L = 100
REPEAT 6 [
  IF REPCOUNT%2 = 1 [
    ELLIPSE [:L, :L, 0h, 4h, 3]  ;  くり返し回数が奇数のとき
  ][
    ELLIPSE [:L, :L, 4h, 0h, 3]  ;  くり返し回数が奇数ではない(偶数の)とき
  ]
  PU
  FD 100
  RT 60
  PD
]

つづいてこのプログラムの 1 行目の :L代入だいにゅうする値を 200 に変更して,動作させてみてください. 同じプログラムが描いたとは思えないほど図形の形が変わるとは思いませんか.

じつこのプログラムIF 文など使わなくても,次のように書くこともできます※4

:L = 100
:S = 0h
:E = 4h
REPEAT 6 [
  ELLIPSE [:L, :L, :S, :E, 3]
  :T = :S
  :S = :E
  :E = :T
  PU
  FD 100
  RT 60
  PD
]

そのほかのくり返し命令 🔰

LibreLogo で利用できるくり返し命令を紹介します. 比較ひかくをしやすいように,同じ図形が描かれるプログラムの例を示すことにします.

REPEAT
これまでにたびたび使ってきた,回数を指定するくり返し命令です.
REPEAT 6 [
  FD 1cm * REPCOUNT
  RT 90
  FD 1cm * REPCOUNT
  RT 90
]
FOR ... IN
リストを使ったくり返しの命令です.
次の例では [1cm,2cm,3cm,4cm,5cm,6cm] というリストの中から,さいしょは 1cm,次は 2cm と 1 つずつ取り出して :X の値としてくり返しを実行します.動作を確かめたら,リストを [2cm,1cm,2cm,3cm] と書きかえて実行してみてください.
FOR :X IN [1cm,2cm,3cm,4cm,5cm,6cm][
  FD :X
  RT 90
  FD :X
  RT 90
]
WHILE
条件が成りたっているうちは,くり返しつづけるという命令です.
次の例では :L が 7 より小さいあいだ,くり返しが続きます※5. 動作を確かめたら,下から 2 行めを :L = :L + 0.2 のように書きかえて実行してみてください. 実行するときは目を回さないよう気をつけてください.
:L = 1
WHILE :L < 7 [
  FD :L * 1cm
  RT 90
  FD :L * 1cm
  RT 90
  :L = :L + 1
]
なお,WHILE は,ほかの 2 つにくらべるとちょっとキケンかもしれません. 条件を 7 > :L のように書いてしまったり,:L = :L + 1 を書き忘れたりすると,いつまでもくり返しが終わらないことになってしまいます※6. タートルがくるったようにはしり回るプログラムを実行してしまったときは,LibreLogo ツールバーの停止ていしアイコンをクリックして,タートルをたすけてあげましょう.