ホーム > プログラミング > 繰り返す。ループだ for

繰り返す。ループだ for

[`evernote` not found]
[`grow` not found]
[`livedoor` not found]
[`yahoo` not found]
Delicious にシェア
このエントリーをはてなブックマークに追加

コンピュータの最も得意とする処理がこの繰り返し。
繰り返し処理のことをプログラミング用語で「ループ」といいます。

「無限ループ」なんて言葉もありますが、
ループを終了する処理が不完全だった為に
終わりの無い繰り返し処理に入ってしまった状態のことです。

プログラミングで「絶対やってはいけない2つ事」のうちのひとつです。
PHPならタイムアウトになったところで強制終了され
残りの処理が完了しなかった程度で済みますが
Cだとコンピュータが永遠に固まった状態になります。

そうならない為にループでは、
繰り返しを行う条件(=繰り返しを終える条件)を
しっかり念頭に置いてプログラミングしましょう。

お題
1から50まで、数をひとつずつ増やしながら足し算を行い、合計を求める。

1 + 2 + 3 + 4 + ・・・・+ 49 + 50 さて幾つ?というやつです。
1から50までならば計算式を書いてもたいしたことないけど
これが10000までだった場合は苦痛でしょう。
単純な繰り返しこそコンピュータにうってつけの処理です。

さて、このお題を要素に分解してみますと、
1から50まで1つずつ増えていく「数」、それと
足し算の結果の「合計」が存在します。

繰り返しの間、「合計」に「数」を加算してゆけば、最終的に「合計」が得られそうです。
繰り返しの条件は、「数」が50 以下であるか否かで判断できます。

ではこれを for文 を使い、日本語まじりのコードで下書きしてみます。

合計 = 0;
for ( 数 = 1; 数 <= 50; 数 = 数 + 1 ) {
    合計 = 合計 + 数;
}

はじめ合計は、何も足されて無い状態なので 0 で初期化しておきます。

次のforがループの始まりの印。
括弧の中は置いといて、大括弧{}中の式が繰り返す実行文です。
合計を足した値を新たな合計としています。

さて括弧の中ですが、
; でもって3つの式に分けられていてそれぞれ役割が決まっています。

左側の式は、ループに入る前に行う前処理です。
前処理が行われるのははじめの1回だけで、
ここでは、数が1から始まるので、数を1で初期化しています。

真ん中の式は、ループを実行するか否かを判断する条件式で、
成立していれば、大括弧の中の処理を実行し、
成立しなければ、ループを終了します。
ここでは数が50以下の間、繰り返したいので 数 <= 50 としています。

右側の式は、大括弧{}の中を実行後に行う後処理です。
ここでは、数をひとつずつ増やすために、数に1を足した値を、新しい数にしています。

後処理の後は、再び条件式に戻り
条件が成立している間、繰りかえされます。

繰り返されるたびに数がひとつずつ増えていき
51 なったところで 数 <= 50 が成立しなくなるので、
合計に51が加算されることなくループは終了します。

これで最終的な合計が得られます。

for文の基本的な書き方

for ( 前処理; 条件式; 後処理 ) {
    実行文;
}

for文の処理の流れ

for前処理
 ⇒ 条件式実行文後処理      ← ココが繰り返される

条件式・実行文・後処理の繰り返しの中で
いずれ条件が成立しなくなるよう組み立ててあれば
無限ループにはなりません。

では、下書きをちゃんと動くPHPのコードに直しましょう。

<?php
// 合計を0で初期化
$total = 0;

for ( $num = 1; $num <= 50; $num = $num + 1) {

    // 合計に数を合算
    $total = $total + $num;

    // 途中経過がわかるよう足した数と現時点の合計を表示
    echo '+', $num, ' = ', $total, '<br>';
}

// 最終の合計表示
echo '合計 ', $total;
?>

書けたら、考えてた通りに動くか確かめよう。
コンピュータは、書いてある通りには動くけど、
考えた通りに書いてあるか確かめる能力は無いので
そこは人力で。

* * *

今日のfor文では真新しいものは出てこなかったけど
計算式で便利な書き方をご紹介。

加算子/減算子

後処理に使った式、 $num = $num + 1
「$num と 1 の合計を、$num に、代入する」ってことですが
「$num を1つ増やす」という書き方もあります。

$num++;

変数に対して1を加算する場合は、
こんな風に変数の後ろにプラスを2つ続けて書くだけでOK。インクリメントと呼ばれます。
反対に「$num を1つ減らす」にはマイナスを2つ続けて書きます。
こちらはデクリメントと呼ばれます。

$num--;

代入演算子

実行文につかった式、$total = $total + $num; にも、別の書き方があります。
「$total に $num を加算する」って場合ね。

$total += $num;;

勿論減算もあります。

$total -= $num;;

さて最後になりましたが、
プログラミングで「絶対やってはいけない2つ事」のうち
もうひとつは、 「ゼロ除算」です。

どんな数でも 0(ゼロ)で割った結果は無限大です。
これをコンピュータにやらせると、
いつまでも結果の出ない割り算を永遠やり続けることになります。
大抵の言語で強制終了するような仕様になっています。

次もループ ⇒ while 執筆中

コメント:0

コメントフォーム
入力した情報を記憶する
accessLogging

ホーム > プログラミング > 繰り返す。ループだ for

Ad
Apache
MySQL
PHP
お気に入り
ん。。。。。。広告
アーカイブ
Ad

ページの上部に戻る