ここから本文です

下に書いてある、プログラミングで平均値と分散を求めたいのですが、これを実行し...

pit********さん

2019/7/1313:03:10

下に書いてある、プログラミングで平均値と分散を求めたいのですが、これを実行してもr(平均値)の値を2回 m のところで、出力してしまい、r2(分散)を出力してくれません。

どこをどう書きかえればいいのですか?

//一次元配列の平均値と分散を求める
//double の配列にする

#include<stdio.h>
void input_array(double*,int);
void print_array(double*,int);
double average_variance(double*,int);


int main()
{
double *a;//配列のポインタ
int n;//配列サイズ
printf("n=");
scanf("%d",&n);

a=new double [n];//配列のメモリ確保

//配列への入力
input_array(a,n);
printf("あなたの入力した配列の値を出力します\n");
print_array(a,n);
//平均と分散の計算
double m=average_variance(a,n);
printf("平均値は%lf、分散は%lf\n",m,m);

//メモリの解放
delete [] a;

return 0;
}

void input_array(double *a, int n)
{
for(int i=0;i<n;i++)
{
printf("a[%d]=",i);
scanf("%lf",&a[i]);
}
}

void print_array(double *a,int n)
{
for(int i=0;i<n;i++)
{
printf("a[%d]=%lf\n",i,a[i]);
}
//return はいらない void 型
}

//平均値と分散の計算
double average_variance(double *a,int n)
{
double sum=0.0;
// print_array(a,n);//チェック用
for(int i=0;i<n;i++)
{
sum=sum+a[i];
}
//printf("sum=%lf",sum);//チェック用
double r=sum/(double)n;

double sum2=0.0;
for(int i=0;i<n;i++)
{
sum2=sum2+(a[i]-r)*(a[i]-r);
}
double r2=sum2/(double)n;

return r;
return r2;
}

閲覧数:
41
回答数:
2
お礼:
50枚

違反報告

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

prw********さん

2019/7/1313:56:15

>平均値と分散を求めたい

こうします

***

#include<stdio.h>
#include<math.h>

void input_array(double* a, int n){
for(int i=0; i<n; i++){
printf("a[%d]=", i);
scanf("%lf", &a[i]);
}
}

void print_array(double* a, int n){
for(int i=0; i<n; i++){
printf("a[%d]=%lf\n", i, a[i]);
}
}

double average(double* a, int n){
double sum = 0.0;
for(int i=0; i<n; i++){
sum += a[i];
}
return sum/n;
}

double variance(double* a, int n, double avg){
double var = 0.0;
for(int i=0; i<n; i++){
var += pow(a[i]-avg, 2);
}
return var/n;
}

int main(void){
double* a;
int n;//配列サイズ

printf("n=");
scanf("%d", &n);

a = new double [n];//配列のメモリ確保

//配列への入力
input_array(a, n);
printf("output your array.\n");
print_array(a, n);

//平均と分散の計算
double avg = average(a, n);
double var = variance(a, n, avg);
printf("avg=%lf\n", avg);
printf("var=%lf\n", var);

//メモリの解放
delete [] a;

return 0;
}

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

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

1〜1件/1件中

2019/7/1412:54:18

new を使っているのなら C++ でやりたいのでしょうか。

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;

template<typename T>
void input_array(vector<T> &a) {
    int i = 0;
    for (auto &v : a) {
        cout << "a[" << i++ << "]=";
        cin >> v;
    }
}
template<typename T>
void print_array(const vector<T> &a) {
    int i = 0;
    for (auto &v : a)
        cout << "a[" << i++ << "]=" << v << endl;
}
double average(const vector<double> &a) {
    double sum = 0.0;
    for (auto &v : a)
        sum += v;
    return sum / a.size();
}
double variance(const vector<double> &a, double avg) {
    double var = 0.0;
    for (auto &v : a)
        var += pow(v - avg, 2);
    return var / a.size();
}
int main() {
    int n;

    cout << "n=";
    cin >> n;
    vector<double> a(n);

    input_array(a);
    cout << "output your array." << endl;
    cout << fixed; // デフォルトは小数点以下を6桁
    // cout << defaultfloat; // 縮めるには
    print_array(a);

    double avg = average(a);
    cout << "avg=" << avg << endl;
    cout << "var=" << variance(a, avg) << endl;
}

この質問につけられたタグ

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

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

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

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

閉じる

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

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

閉じる