見出し画像

高校生のためのScratch入門-4/条件分岐(if文)と繰り返し(whileループ)

こんにちはロック204チャンネルです。
今回は「高校生のためのスクラッチ入門4 条件分岐と繰り返し」についてお送りします。

演算ブロックの中に「論理演算」ブロックがあります。
これは条件判断を行ないプログラムの流れを制御するためのブロックになります。
これには、より大きい、より小さい、等しいといった基本的なブロックがあり
これをさらに複雑な条件で論理式を形成する、論理積andに用いる「かつ」ブロック
論理和orに用いる「または」ブロック、否定notに用いる「ではない」ブロックがあります。
それでは使用例について見て行きましょう。
右側の上に書かれた「100>50」これは正しい論理式なので実行すると結果は「true」となります。
したの「40>50」は正しくない論理式になるので実行するとfalseとなります。
このようにtrueまたはfalseを取る値はブーリアン型のデータと言われています。
右下の「変数>50 かつ 変数<60」は左右の二つの論理演算ブロックがand条件で結合された条件式となります。

論理演算ブロックの種類(動画)

論理演算ブロックを使用した条件分岐ブロックには「もし(何々)なら」ブロックと「もし(何々)なら でなければ」のブロックがあります。
スライド中ほどの、「もし(何々)なら」ブロックは、その下のフローチャートのように条件式が成り立った場合にはブロック内のコードを実行し、そうでなければブロック内を無視して次のブロックに進みます。
「もし(何々)ならで なければ」ブロックは条件式が成り立った場合、「もし(何々)なら」のしたのブロックを実行し、そうでなければ、「でなければ」の下のブロックを実行しこのブロックの処理を終わります。


それでは「もし」ブロックの具体的な例を見てみましょう。
左側のプログラムを実行すると、変数dataに21が代入され、「もし」ブロックで「data>20」が判定されます。
この例では結果はtrueとなるので「dataは20を超えています と3秒言う」ブロックが実行されます。
それに対して、右側のプログラムでは、dataに20代入されているので、「もし」ブロックの「data>20」が条件式として設定されていますので、結果はFalseとなります。
この場合「もし」ブロック内の「dataは20を超えています と 3秒言う」ブロックを無視し次のブロックに移るので何も表示されません。

次の例は「もし(何々)なら でなければ」ブロックの分岐例を示しています。
最初に、dataに21を代入します。
次に「もし」ブロックで、「data>20」を判定し、trueであればその下の「dataは20を超えています と 3秒言う」を実行します。
この条件式が成り立たない場合は、「でなければ」の下のブロックを実行します。
この場合、「dataは20未満です と 3秒言う」ブロックが実行されます。
この例では、「data>20」の条件式は満たされtrueとなり、「dataは20を超えています と 3秒言う」ブロックが実行されます

もしブロック(If文)と論理演算ブロックの使用

「もし」ブロックわ使用して、入れ子構造を持つプログラムを作成することもできます。
つまり外側の「もし」ブロック内に、もう一つ「もし」ブロックを入れてプログラムを作成することができます。
また、この入れ子構造は幾重にも繰り返し使用することができます。
こちらの例では、外側の「もし」ブロックとして「data<10」を配置し、この条件が成立した場合、②の「dataは10
未満です と 3秒言う」を実行します。
そうでない場合には、「でなければ」の中のブロックを実行します。
ここに位置側の「もし」ブロックを配置し、条件式として「data>9 かつ data<20」を設定しています。
この条件が成立すると「dataは9超え、20未満です と 3秒言う」ブロックを実行します。
そう「でなければ」、「dataは20以上です と 3秒言う」ブロックを実行することとなります。

If文の入れ子構造とキーボード入力

次に繰り返しループ「(何々)まで繰り返す」ブロックを紹介します。これは他の言語ではwhile文とも言われます。
このブロックでは、条件が成り立つまでブロック内のコードが実行されます。
ここでは「(data?)と聞いて待つ」ブロックを使用して、キーボードでよりの入力結果を「答え」に取得します。
そして「答え」を変数dataに取得します。
そして先ほどのdataが10以下なのか、dataが9超えかつ20未満であるのか、あるいは20以上であるのかを判断するブロックを実行して行きます。
そして再びループのはじめに戻り、条件式で判断します。
入力されたdataが999であればこのループを抜け出し、「プログラム終了 と 2秒言う」ブロックを実行してプログラムは終了します。

繰り返し(ループ)処理する

それでは、「まで繰り返す」ブロックを使用して累積値を求めてみましょう。
最初に①で変数「累積値」に0を代入します。
そして②で変数dataに0を代入します。
このdataはキーボードより入力されたデータを入れるために使用します。
次に、「(何々)まで繰り返す」ブロックを使用し、③データを繰り返し入力して行きます。
この時の条件式は「dataが999でない」限りこのループを回ることになります。
ブロック内は「data? と聞いて待つ」ブロックでキーボード入力を行ない、その「答え」をdataに入れます。
次に「もし dataが999でなければ」、累積値に入力されたデータを加えていきます。
そしてループの先頭に戻り、dataが999であればループを抜け、最後の累積値を表示するブロックを実行します。
ここで累積値を表示するには、文字列「累積値は」と変数「累積値」の内容を結合し吹き出しとして表示します。

次に平均値を求めてみましょう。
先ほどのプログラムを少し改変してプログラムを作成しました。
最初に変数「累積値」に0を代入します。
次に、変数nに0を代入します。この変数は入力されたデータ数を入れる変数となります。
次に変数dataを0で初期化します。
「まで繰り返す」ブロック内は、先ほどと同様にキーボードよりデータ入力し、そのデータが999でなければ
累積値にデータを加えます。
そしてデータ数をカウントするためnに1を加えます。
このようにして累積値を求め、プログラムの最後で累積値をnで割り平均値を求めます。

累積値と平均値の説明


この記事が気に入ったらサポートをしてみませんか?