差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
gimmickkouza:electronic_basic:3:9_for [2024/05/29 20:13] – lutamesta | gimmickkouza:electronic_basic:3:9_for [2024/06/21 18:30] (現在) – lutamesta | ||
---|---|---|---|
行 2: | 行 2: | ||
「for」も「while」と同じ、特定の条件下で処理を繰り返す制御文です。 | 「for」も「while」と同じ、特定の条件下で処理を繰り返す制御文です。 | ||
機能的にはwhileと同じですが、よりコンパクトな文章で書き表すことができます。 | 機能的にはwhileと同じですが、よりコンパクトな文章で書き表すことができます。 | ||
- | + | ||
===== whileをコンパクトにした「for」 ===== | ===== whileをコンパクトにした「for」 ===== | ||
==== for文の基本的な書き方 ==== | ==== for文の基本的な書き方 ==== | ||
行 21: | 行 20: | ||
早速解説していきます。 | 早速解説していきます。 | ||
- | + | ==1行目== | |
- | 1行目: | + | forの後ろの( )内に、3つの要素を「; |
- | forの後ろの( )内に、3つの要素を「; | + | **一つめは「繰り返しの判定に使う変数の宣言と初期値の代入」**です。先ほどのwhileのサンプルコードの変数countの宣言にあたる部分です。 |
- | **一つめは「繰り返しの判定に使う変数の宣言と初期値の代入」**です。先ほどのwhileのサンプルコードの変数countの宣言にあたる部分です。 | + | **二つめは「条件式の設定」**です。先ほどの例では(count < 10)でした。 |
- | **二つめは「条件式の設定」**です。先ほどの例では(count < 10)でした。 | + | **三つめは「繰り返しの判定に使う変数に加える変化」**です。whileの中身にある count = count + 1; |
- | **三つめは「繰り返しの判定に使う変数に加える変化」**です。whileの中身にある count = count + 1; | + | ==2~3行目== |
- | + | ここは{ }で括られた、for文の内部です。 | |
- | + | ここに、条件式が成立しているときに繰り返したい処理を書きます。 | |
- | 2~3行目: | + | ==4行目== |
- | ここは{ }で括られた、for文の内部です。 | + | 波かっこ閉じによって、このfor文は終了します。 |
- | ここに、条件式が成立しているときに繰り返したい処理を書きます。 | + | for文の条件式が不成立だった、或いはfor文の中身を繰り返処理する中で、成立していた式が不成立になった場合、for文は終了し5行目から次の処理が実行されます。 |
- | + | ||
- | + | ||
- | 4行目: | + | |
- | 波かっこ閉じによって、このfor文は終了します。 | + | |
- | for文の条件式が不成立だった、或いはfor文の中身を繰り返処理する中で、成立していた式が不成立になった場合、for文は終了し5行目から次の処理が実行されます。 | + | |
- | + | ||
==== for文のサンプルコード解説 ==== | ==== for文のサンプルコード解説 ==== | ||
サンプルコード3-9_for.inoを開いてください。 | サンプルコード3-9_for.inoを開いてください。 | ||
行 76: | 行 69: | ||
< | < | ||
- | 「マッシュRoom」 | + | マッシュRoom |
- | 「現在XX回目の処理だよ」 | + | 現在XX回目の処理だよ |
</ | </ | ||
の2行が、シリアルモニタにだいたい1秒間隔で表示されます。 | の2行が、シリアルモニタにだいたい1秒間隔で表示されます。 | ||
「現在XX回目~」の「XX」は1~10までで1回ずつ増え、10回目を表示した後、 | 「現在XX回目~」の「XX」は1~10までで1回ずつ増え、10回目を表示した後、 | ||
- | < | + | < |
が表示され、約5秒経過した後「現在1回目~」から再度同じ動作が実行されます。 | が表示され、約5秒経過した後「現在1回目~」から再度同じ動作が実行されます。 | ||
行 88: | 行 81: | ||
続いてプログラムの解説です! | 続いてプログラムの解説です! | ||
setup部は繰り返しになるので割愛します。 | setup部は繰り返しになるので割愛します。 | ||
+ | ==7行目== | ||
< | < | ||
for (int count = 1; count <= 10; count++) { | for (int count = 1; count <= 10; count++) { | ||
</ | </ | ||
- | 7行目: | + | forの後ろの( )内に、3つの式が「; |
- | forの後ろの( )内に、3つの式が「; | + | |
- | **一つめは、「繰り返しの判定に使う変数の宣言と初期値の代入」**です。 | + | **一つめは、「繰り返しの判定に使う変数の宣言と初期値の代入」**です。 |
- | この部分は、**for文を開始する時に1度だけ実行**されます。 | + | この部分は、**for文を開始する時に1度だけ実行**されます。 |
- | 今回はint count = 1; でint型の変数countを宣言し、中身に「1」を入れます。 | + | 今回はint count = 1; でint型の変数countを宣言し、中身に「1」を入れます。 |
- | while文では、countを宣言した時に代入した初期値は「0」でした。 | + | while文では、countを宣言した時に代入した初期値は「0」でした。 |
- | この0が入ったcountに対し、while文の" | + | この0が入ったcountに対し、while文の" |
- | 一方for文では、countへの加算処理はfor文の" | + | 一方for文では、countへの加算処理はfor文の" |
- | for文の内部にある、「現在XX回目の処理だよ」のメッセージを表示する処理をする前に1回目のカウントを済ませている必要があるので、初期値を「1」に設定しています。 | + | for文の内部にある、「現在XX回目の処理だよ」のメッセージを表示する処理をする前に1回目のカウントを済ませている必要があるので、初期値を「1」に設定しています。 |
- | 次に、**二つめの式では「条件式の設定」**をしています。今回は count <= 10; です。 | + | 次に、**二つめの式では「条件式の設定」**をしています。今回は count <= 10; です。 |
- | ここはwhileの例では (count < 10) でした。 | + | ここはwhileの例では (count < 10) でした。 |
- | whileでは、0の状態でwhile文の内部に突入したcountが、1回目の処理を行った証として1加算されます。 | + | whileでは、0の状態でwhile文の内部に突入したcountが、1回目の処理を行った証として1加算されます。 |
- | これを繰り返し、最終的に9の状態で突入し10回目の処理を行ったcountは10になります。 | + | これを繰り返し、最終的に9の状態で突入し10回目の処理を行ったcountは10になります。 |
- | この10を以て「既に10回処理した」判定をし、whileから脱出する処理フローになっています。 | + | この10を以て「既に10回処理した」判定をし、whileから脱出する処理フローになっています。 |
- | 一方、今回のforではcountの初期値は1です。理由は先述の通り、「現在XX回目の処理だよ」のメッセージ表示に対応するためです。 | + | 一方、今回のforではcountの初期値は1です。理由は先述の通り、「現在XX回目の処理だよ」のメッセージ表示に対応するためです。 |
- | for文の内部の処理を全て終えた段階でこのcountには+1の処理がされ「2」となり、for文の先頭に戻って再度条件式の判定を受けます。 | + | for文の内部の処理を全て終えた段階でこのcountには+1の処理がされ「2」となり、for文の先頭に戻って再度条件式の判定を受けます。 |
- | __つまり今回のfor文では、変数countは 「既に何回処理したか」 ではなく 「これから何回目の処理をしたいか」 を意味します。__ | + | __つまり今回のfor文では、変数countは 「既に何回処理したか」 ではなく 「これから何回目の処理をしたいか」 を意味します。__ |
- | 3-8と同じ要領で「< | + | 3-8と同じ要領で「< |
- | **三つめの式は「繰り返しの判定に使う変数に加える変化」**です。 | + | **三つめの式は「繰り返しの判定に使う変数に加える変化」**です。 |
- | count++ の++は、「1加算する」を意味します (3-5の「Tips:Arduinoでの計算記号」を見てね!) | + | count++ の++は、「1加算する」を意味します (3-5の「Tips:Arduinoでの計算記号」を見てね!) |
- | (count = count + 1; でも同じ結果は得られます。どちらを使ってもOKです) | + | (count = count + 1; でも同じ結果は得られます。どちらを使ってもOKです) |
- | この**「繰り返しの判定に使う変数に加える変化」は、for文の中身を処理した後に実行されます。** | + | この**「繰り返しの判定に使う変数に加える変化」は、for文の中身を処理した後に実行されます。** |
+ | ==13行目== | ||
< | < | ||
Serial.println(" | Serial.println(" | ||
</ | </ | ||
- | 13行目: | + | 文字列「マッシュRoom」をシリアルモニタに表示する命令です。 |
- | 文字列「マッシュRoom」をシリアルモニタに表示する命令です。 | + | ==15~17行目== |
< | < | ||
Serial.print(" | Serial.print(" | ||
行 135: | 行 126: | ||
Serial.println(" | Serial.println(" | ||
</ | </ | ||
- | 15~17行目: | + | シリアルモニタに文字列「現在XX回目の処理だよ」と表示させます。 |
- | シリアルモニタに文字列「現在XX回目の処理だよ」と表示させます。 | + | ==20行目== |
< | < | ||
delay(1000);// | delay(1000);// | ||
</ | </ | ||
- | 20行目: | + | 人間がシリアルモニタを目で追えるよう、1秒待機させます。 |
- | 人間がシリアルモニタを目で追えるよう、1秒待機させます。 | + | |
for文の最後まで来たので**__for文の先頭に戻り、条件式の判定を再度行います。__** | for文の最後まで来たので**__for文の先頭に戻り、条件式の判定を再度行います。__** | ||
for文の中身を10回処理した後、22、23行目を実行し、そしてloop部の先頭に戻ります。 | for文の中身を10回処理した後、22、23行目を実行し、そしてloop部の先頭に戻ります。 | ||
- | + | ||
+ | |||
===== 「for」のまとめ ===== | ===== 「for」のまとめ ===== | ||
===for文のポイント=== | ===for文のポイント=== |