ここから本文です

平均値を求めていますが、ave=(calc(data)/data.length);をreturn(calc(data)/data...

lio********さん

2019/8/1001:14:33

平均値を求めていますが、ave=(calc(data)/data.length);をreturn(calc(data)/data.length)にして、return aveを消せば平均値がでますが、

なぜ最初のではできないのでしょうか?
また、今回引数にdataをいれていますが、なしでもできますか?引数があまり理解しておりません。わかりやすく説明していただけますと幸いです。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>課題</title>
<script>
var data = [59, 39, 100, 2, 15, 40, 84, 97];
var ave; // 平均値
function calc(data){
var sum=0;
for (var i= 0; i<data.length;i++){
sum+=data[i];
}
return sum;
}
//平均値を求める
function calc_ave(data){
ave=(calc(data)/data.length);
//上記をreturn(calc(data)/data.length)
}return ave//消去

document.write(calc_ave(data));
</script>
</head>
<body>
</body>
</html>

閲覧数:
39
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

glo********さん

2019/8/1010:24:26

そもそもの混乱する第一原因は
仮引数 の名称を 実引数 と同じにしているところにあると思います。
第二原因は return の理解不足。
第三原因としては関数を2個も使っていること。
この辺でしょうかね。

仮引数 とか 実引数 とか言われてもわからないと思うので
大まかな基本形を書いておきます↓。

---基本形--------------------------------
function 関数名(仮引数){
    …何らかの演算を実行…
    return 戻り値となる値;
}

関数名(実引数); //←戻り値となる値が返ってくる
-----------------------------------------



今回書かれていらっしゃるコードに関して
引数の意味(存在価値)を入れた上で
もっとシンプルに書き直してみます。

これで理解してみてください。



<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>課題</title>
</head>
<body>

<script>
var data1 = [59, 39, 100, 2, 15, 40, 84, 97];
var data2 = [57, 37, 98, 0, 13, 38, 82, 95];

function getAverage(arr){
    var sum=0;
    for (var i= 0; i<arr.length; i++){
        sum += arr[i];
    }
    return sum/arr.length;
}

document.write( getAverage(data1) );
document.write( "<br>" );
document.write( getAverage(data2) );
</script>

</body>
</html>



関数というのは
たいてい「使い回す」ためにあるものです。

同じ演算処理を何度も何度も書くことは
データファイルの容量を増やす原因にもなりますし
労力やミスを招くなどの点において良くないことです。

そこで登場するのが関数です。
※基本は数学の関数と同じです。

関数を使い回すときに
一部分だけ違うデータなどがある場合
その違う部分だけを関数に渡して
その違う部分に応じた計算結果を出してくれると便利ですよね?

それが引数です。

数学で言えば例えば一次関数

    f(x) = 2x + 4

みたいな関数があった場合
x として 2 を渡せば
    f(2) = 2×2 + 4
で 8 が左辺に返って来ますよね。
この 8 が戻り値です。


    f(x) = 2x + 5

この関数を一回の演算に使うのではなく
x に 0 や 1 や 2 や 3 や 4 や 5 …
を順繰りに入れて実行させると
戻り値は 4 や 6 や 8 や 10 や 12 や 14 …
となってその点をつなぐと
f(x) 軸の切片 4 で傾きが 2 のグラフがかけます。

このように使い回すのが本来の意味(存在価値)です。

ちなみに数学の f(x) の f は function の略です。
つまり JavaScript の関数 function と同じです。

  • glo********さん

    2019/8/1012:16:47

    【補足】

    それと【回答】では無駄な変数を作りたくなかったので
    変数 ave を使わない方向で書きましたが
    別に使ってもかまいませんよ。

    使うのであれば関数 getAverage を
    次のように変更するのも1つの方法例です。
     


    function getAverage(arr){
        var sum=0, ave;
        for (var i= 0; i<arr.length; i++){
            sum += arr[i];
        }
        ave = sum/arr.length;
        return ave;
    }

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

poc********さん

2019/8/1001:21:25

JavaScriptのことは知りませんが、
return aveが、関数のカッコの外に出てしまってますよ。。。

多分、
function calc_ave(data){
ave=calc(data)/data.length;
return ave;
}
が正解ではないでしょうか。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる