とぎぷろべい

包丁研ぎとプログラミングと米国株投資についてのなんやかんや

入力した値の積算と平均を演算するスクリプト(PHP)

f:id:feci:20210727001932j:plain

PHP7

 

PHP7.4.1で作った値の積算と平均を演算する簡単なスクリプトです。

<?php

$bbb = [];  //$aaa格納用の配列

do {
  echo '整数を入力してください(0で終了します)';
  $aaa = (int)trim(fgets(STDIN));

  if ($aaa === 0) {
    echo '計算を終了します。';  //終了時メッセージ
    break;  //スクリプトの終了
  }

  array_push($bbb, $aaa);  //配列の末尾に$aaaの追加
  $ccc = 0;  //合計用

  for ($i=0; $i<count($bbb); $i++) {
    echo $i+1' → ', $bbb[$i], "\n";  //最新の$aaaの値を出力

    $ccc += $bbb[$i];  //合計
  }

  echo "現在の合計は{$ccc}です。\n";  //合計の出力

  $ddd = $ccc / $i;  //平均
  echo "現在の平均は{$ddd}です。\n";  //平均の出力
while(true);  //if文のbreakで止まるのでここはtrue

 

このスクリプトでは、ターミナルで入力した数値をArray型である$bbbに順次+=で代入しながら、$aaaの値と$bbb内の合計値と$bbb内の平均値を出力しています。

 

どの場所で変数宣言をするのかというのは、けっこう重要なポイントです。

たとえば空の配列である$bbbですが、この変数の宣言をdo文の中でおこなうと、2回目以降に入力された値が+=ではなく直接的に代入されてしまいます。

 

つまりこの場合、$bbbの値と$aaaの値は毎回完全に同じものになってしまいます。

当然ですが、こうなってしまうと合計も平均も出せません。

 

$dddがfor文の外で宣言されているのも$bbbと同じ理由です。

見てくれの問題でfor文内の$cccの宣言の下行に$dddを書いたりすると、$dddの値がINFになってしまいます。

 

どの場所でどの変数を宣言するのか……重要なポイントですね。

 

 

以上です。