tanaka's Programming Memo

プログラミングについてのメモ。

703 for文の使い方

プログラミングの6つのミソのうち、最後が「繰り返し処理」である。
入力
処理
出力
順次処理
分岐処理
繰り返し処理

沢山のデータを記録する配列を使うことで、3つのラベルを動かすことができた。しかし、もっとLabelを増やすには、Labelの個数だけプログラムを用意することは面倒なので避けたい。そこで利用できるのが繰り返し処理である。

ここでマスターしたいこと

  • for文の使い方を知ること
  • for文を使って、演習のプログラムで重複している部分を整理すること

for文の使い方

for文は、指定の条件が成立している間、for文の直後のブロックを繰り返し実行する。配列と組み合わせることで、大量のデータを処理することができる。

for文の基本形

for (初期化式 ; 繰り返す条件 ; 更新処理)
{
    // 繰り返しブロック
}
  • 基本構造は、for(){}
  • for文の後ろの()の中は、以下の3つのブロックがあり、;(セミコロン)で区切る。
    • 初期化式
    • 繰り返す条件
    • 更新処理
  • for文の直後の{}の中に、繰り返す条件が成立している間、実行するプログラムを入力する。

for文の動作イメージ

for文は複雑な動きをする。各ブロックの処理手順を図とアニメで示す。よく観察して、動きをマスターしよう。

f:id:am1tanaka:20141212221941p:plain
for文の処理手順

f:id:am1tanaka:20141212222013g:plain
for文の処理手順アニメ

for文のまとめ

  • 上記は繰り返しの典型例である。暗記しておくこと。
  • 上記で3回繰り返す。
  • 繰り返す条件のi<33を、繰り返したい回数に変更して使う。
  • 繰り返しブロック内の変数iを、制御変数と呼ぶ。
  • 制御変数は、繰り返すたびに0から1ずつ数が増えていく。
  • 制御変数を、配列の添え字の参照に利用することで、大量のデータを繰り返して処理することができる。

0~10までの乱数を5個生成して、その合計を求めるプログラムを以下に示す。

作成動画


703 for文の使い方 - YouTube

作成手順

  1. 新しいC#のプロジェクトを作成して、名前をprojForなどにする。
  2. フォームにButtonを1つ配置する。
  3. button1をダブルクリックしてコードを開く。
  4. 乱数を使うためのRandom型のrandを定義する。
  5. 乱数を5個入れておくための配列datasを定義する。
  6. コンストラクタで、以下のコードを書く。
    1. 5回繰り返すfor文を書く。
    2. 繰り返しブロックで、datas[i]に0~10の乱数を代入する。
    3. 生成した乱数を「○番目の乱数は、○」と表示する。
  7. button1をクリックした時の処理内に、以下のコードを書く。
    1. 合計を求めるためのint型の変数sumを定義して、0を代入。
    2. 5回繰り返すfor文を書く。
    3. 繰り返しブロックで、sumにdatas[i]を足していく。
    4. for文のブロックの下に、sumの表示を作成する。

プログラム

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace projFor
{
    public partial class Form1 : Form
    {
        Random rand = new Random();
        int[] datas = new int[5];

        public Form1()
        {
            InitializeComponent();
            for (int i = 0; i < 5; i++)
            {
                datas[i] = rand.Next(0, 11);
                MessageBox.Show("" + i + "番目の乱数は、" + datas[i]);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int sum = 0;
            for (int i = 0; i < 5; i++)
            {
                sum = sum + datas[i];
            }
            MessageBox.Show("合計は" + sum);
        }
    }
}

演習

  • 前の項の演習で作成したプログラムの行数を、for文を使って減らす。

考え方

  • Labelのデータはすべて配列になっているので、[0]~[2]の添え字を使って、何番目のLabelを処理するかを指定できる。
  • 3回繰り返すfor文を作成して、制御変数を添え字にすれば、3つにコピーしたプログラムを1つにすることができる。

手順

  • コンストラクタの中で以下を行う。
    • 3回繰り返すfor文を作成する。
    • vx[1]、vy[1]、vx[2]、vy[2]に乱数を求める行を削除する。
    • 同様に、label[1]とlabel[2]の行も削除する。
    • vx[0]とvy[0]に乱数を求める行と、label[0]を生成する行を、for文の繰り返しブロックの中に移動。
    • vx[0]をvx[i]に、vy[0]をvy[i]、label[0]をlabel[i]に書き換える。
  • タイマー処理の中で以下を行う。
    • 3回繰り返すfor文を作成する。
    • vx[1]、vy[1]、label[1]、vx[2]、vy[2]、label[2]に関連する行をすべて削除する。
    • vx[0]、vy[0]、label[0]に関連する行をすべてfor文の繰り返しブロックに移動する。
    • vx[0]、vy[0]、label[0]をそれぞれ、vx[i]、vy[i]、label[i]に書き換える。

以上。

まとめ

  • for文でプログラムを繰り返して実行することができる。
  • for文の処理手順は複雑なので、何度も確認して雰囲気を掴む。
  • 繰り返しの基本形は以下の通り。
for (int i=0 ; i<繰り返し回数 ; i++)
{
    //繰り返しブロック
}
  • 制御変数と配列を組み合わせることで、大量のデータを処理することができる。

関連情報

  • for文の繰り返しブロック内では、以下の命令が使える。
    • break文は、その場で繰り返しを終了する。
for (int i=0 ; i<100 ; i++)
{
    MessageBox.Show(""+i);
    if (i == 5)
    {
        break;
    }
}

上記のプログラムは100回繰り返すfor文があるが、iが5になったらbreak文で繰り返しが終了する。よって、MessageBoxで表示されるのは「0」「1」「2」「3」「4」「5」だけである。

    • continue文は、繰り返しブロックの処理をその場で終え、次の繰り返しの確認に移行する。
for (int i=0 ; i<10 ; i++)
{
    if (i<5) {
        continue;
    }
    MessageBox.Show(""+i);
}

上記のプログラムは10回繰り返すfor文があるが、iが5より小さい間はcontinueが実行されるのですぐに次の繰り返しに移行する。よって、MessageBoxで表示されるのは「5」「6」「7」「8」「9」だけである。

  • 繰り返し処理には以下のwhile()文も使える。繰り返し条件が成立している間、繰り返しブロックが実行され続ける。
while(繰り返し条件)
{
    // 繰り返しブロック
}
    • for文と違い、初期化式や、繰り返す時に行う処理を書く場所がないので、自分で書く必要がある。
    • 繰り返しブロック内で、繰り返し条件の変更がないと、繰り返しが終わらない無限ループという状態に陥ることがあるので、使い方には注意が必要である。
    • while文の繰り返しブロック中でも、breakcontinueが使える。


前へ | 目次 | 次へ