差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
gimmickkouza:electronic_basic:3:9_for [2024/05/29 22:16] lutamestagimmickkouza: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を開いてください。
行 88: 行 81:
 続いてプログラムの解説です! 続いてプログラムの解説です!
 setup部は繰り返しになるので割愛します。 setup部は繰り返しになるので割愛します。
 +==7行目==
 <code> <code>
  for (int count = 1; count <= 10; count++) {  for (int count = 1; count <= 10; count++) {
 </code> </code>
-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文の"内部"で+1の加算処理をした後に「現在XX回目の処理だよ」を表示する構造になっていました。+この0が入ったcountに対し、while文の"内部"で+1の加算処理をした後に「現在XX回目の処理だよ」を表示する構造になっていました。
  
- 一方for文では、countへの加算処理はfor文の"内部"ではなく、"for文内部の処理を終えた後"で行われます。 +一方for文では、countへの加算処理はfor文の"内部"ではなく、"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と同じ要領で「<(未満)」を使ってしまうと、countが10の時に10回目の処理をすることなくfor文を終了してしまうので、「<=(以上)」を使って処理をさせています。 +3-8と同じ要領で「<(未満)」を使ってしまうと、countが10の時に10回目の処理をすることなくfor文を終了してしまうので、「<=(以上)」を使って処理をさせています。 
      
      
- **三つめの式は「繰り返しの判定に使う変数に加える変化」**です。 +**三つめの式は「繰り返しの判定に使う変数に加える変化」**です。 
- count++ の++は、「1加算する」を意味します (3-5の「Tips:Arduinoでの計算記号」を見てね!) +count++ の++は、「1加算する」を意味します (3-5の「Tips:Arduinoでの計算記号」を見てね!) 
- (count = count + 1; でも同じ結果は得られます。どちらを使ってもOKです) +(count = count + 1; でも同じ結果は得られます。どちらを使ってもOKです) 
- この**「繰り返しの判定に使う変数に加える変化」は、for文の中身を処理した後に実行されます。** +この**「繰り返しの判定に使う変数に加える変化」は、for文の中身を処理した後に実行されます。** 
 +==13行目==
 <code> <code>
 Serial.println("マッシュRoom");  //モニタに文字列を表示 Serial.println("マッシュRoom");  //モニタに文字列を表示
 </code> </code>
-13行目: +文字列「マッシュRoom」をシリアルモニタに表示する命令です。 
- 文字列「マッシュRoom」をシリアルモニタに表示する命令です。 +==15~17行目==
 <code> <code>
 Serial.print("現在"); Serial.print("現在");
行 135: 行 126:
 Serial.println("回目の処理だよ"); Serial.println("回目の処理だよ");
 </code> </code>
-15~17行目: +シリアルモニタに文字列「現在XX回目の処理だよ」と表示させます。 
- シリアルモニタに文字列「現在XX回目の処理だよ」と表示させます。 +==20行目==
 <code> <code>
 delay(1000);//1秒待機します delay(1000);//1秒待機します
 </code> </code>
-20行目: +人間がシリアルモニタを目で追えるよう、1秒待機させます。
- 人間がシリアルモニタを目で追えるよう、1秒待機させます。+
      
      
 for文の最後まで来たので**__for文の先頭に戻り、条件式の判定を再度行います。__** for文の最後まで来たので**__for文の先頭に戻り、条件式の判定を再度行います。__**
 for文の中身を10回処理した後、22、23行目を実行し、そしてloop部の先頭に戻ります。 for文の中身を10回処理した後、22、23行目を実行し、そしてloop部の先頭に戻ります。
- +   
 +  
 ===== 「for」のまとめ ===== ===== 「for」のまとめ =====
 ===for文のポイント=== ===for文のポイント===