【STAY HOME 応援企画】LibreLogo のくりかえしの制御せいぎょ

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

正多角形せいたかくけいえがくプログラムを改良かいりょうしよう 🔰

まえ作成さくせいした正多角形を描くプログラム入力にゅうりょくくわえるとつぎのようにできます.

:N = INT (INPUT "辺の数")  ; 辺の数を整数として入力する
:L = FLOAT (INPUT "辺の長さ")  ;  辺の長さを実数として入力する
:A = 360/:N
REPEAT :N [
  FD :L
  RT :A
]
図1・LibreLogo のゼロ除算エラー
図1・LibreLogo のゼロ除算エラー

このプログラムを実行じっこうしたとき,へんかずに 2 以下いかを入力したらどうなるでしょう? 2 や 1 を入力したときは,正多角形とはいえないまでもいちおうなにかを描いてくれますが,0 を入力すると図 1 のようなエラーが表示ひょうじされます. これはプログラムの 3 行めの :A = 360/:N において,360 をゼロでろうとしたためにこるエラーです. 算数さんすうでも,かずをゼロで割ってはいけないとならったはずですが,LibreLogo でもやはりゼロによる割りざんをしてはいけないのです.

ゼロによる割り算が起こらないようにするには,つぎのようなかんがえかたがありそうです.

ここでは 2 つめの考え方でプログラムを改良してみましょう. 前回ぜんかいでてきた WHILE使つかえそうです. いまWHILE条件じょうけんを「:N が 3 よりちいさい」とすればよいので,プログラムは次のようにきなおせばよいでしょう※1

:N = 1
WHILE :N < 3 [
  :N = INT (INPUT "3以上の辺の数")
]
: L = 0
WHILE :L <= 0 [
  :L = FLOAT (INPUT "正の辺の長さ")
]
:A = 360/:N
REPEAT :N [
  FD :L
  RT :A
]

このプログラムでは辺の長さも正の値が入力されるまでくり返すようにもしています. 1 行めの :N = 1 や 5 行めの :L = 0 は,すくなくとも 1 回はくり返しが実行されるようにするための「オマジナイ」です※2

くり返しを制御してみよう 🔰

「オマジナイ」を使わずに辺の数として 3 以上を入力してもらうようにするには,次のようにすればよいでしょう※3

WHILE TRUE [
  :N = INT (INPUT "3以上の辺の数")
  IF :N >= 3 [ BREAK ]
]
WHILE TRUE [
  :L = FLOAT (INPUT "正の辺の長さ")
  IF :L > 0 [ BREAK ]
]
:A = 360/:N
REPEAT :N [
  FD :L
  RT :A
]

TRUE は必ず条件が成りたつようにするための値で,WHILE TRUE とすることで,いつまでもくり返しが続く無限むげんループを作っています※4BREAK はくり返しをやめる命令めいれいで,このあと紹介しょうかいする CONTINUE といっしょにループを制御する命令とばれます.

くり返し処理しょりのなかに CONTINUE があると,それよりあとにある命令は実行されずに,くり返しの条件を調しらべるところに戻ります. この説明せつめいだけではわかりにくいと思いますので,例を示しましょう.

WHILE TRUE [
  :N = INT (INPUT "3以上の辺の数")
  IF :N = 0 [ BREAK ]
  IF :N < 3 [ CONTINUE ]
  WHILE TRUE [
    :L = FLOAT (INPUT "正の辺の長さ")
    IF :L > 0 [ BREAK ]
  ]
  :A = 360/:N
  REPEAT :N [
    FD :L
    RT :A
  ]
]

このプログラムは,辺の数として 0 を入力すると終了し,3 より小さい数を入力すると上にもどって辺の数の入力を求めます. 辺の長さは正の値が入力されるようにして,正 :N 角形を描くことをくり返します.