掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30215

平均と分散を求めるプログラム
投稿者---kokosan60(2007/05/28 23:15:23)


以下のプログラムはポインタを使って配列に宣言されている値の平均と分散を求めるプログラムなのですが、うまく実行できません。どこが間違っているのでしょうか。
#include <stdio.h>
void a(int *s, int n, double *mean, double *variance);

int main(void)
{
int i, n;
int a[]={12, 17, 99, 48, 45, 23, 12, 56, 100}; double heikin, bunsan;

a(&a[i],n,&heikin,&bunsan);

printf("平均=%f 分散=%f\n",heikin,bunsan);

return (0);
}

/* 合計を求める関数 */
void a(int *s, int n, double *mean, double *variance)
{
int i,j,k;
for(i=0;i<9;i++){
j=0;
j+=s[i];
*mean=j/9;
}
for(i=0;i<9;i++)
k+=(((s[i]-(*mean))*(s[i]-(*mean)))/9);
*variance=k;

}


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:平均と分散を求めるプログラム 30216 επιστημη 2007/05/28 23:26:31
<子記事> Re:平均と分散を求めるプログラム 30217 Blue 2007/05/29 00:34:27
<子記事> Re:平均と分散を求めるプログラム 30218 Hermit 2007/05/29 06:42:27
<子記事> Re:平均と分散を求めるプログラム 30219 επιστημη 2007/05/29 06:48:38
<子記事> Re:平均と分散を求めるプログラム 30220 acid 2007/05/29 09:47:51
<子記事> Re:平均と分散を求めるプログラム 30221 kokosan60 2007/05/29 18:37:47
<子記事> Re:平均と分散を求めるプログラム 30224 kokosan60 2007/05/29 19:17:52
<子記事> Re:平均と分散を求めるプログラム 30239 kokosan60 2007/05/30 21:26:56


No.30216

Re:平均と分散を求めるプログラム
投稿者---επιστημη(2007/05/28 23:26:31)
http://blogs.wankuma.com/episteme/


「うまく実行できません」を説明すべし。



この投稿にコメントする

削除パスワード

No.30217

Re:平均と分散を求めるプログラム
投稿者---Blue(2007/05/29 00:34:27)


> a(&a[i],n,&heikin,&bunsan);
i(とn)の値はいくつになっているのでしょうかね?
printfとかで表示してみると良いでしょう。

また、掲示板ご利用上の注意には必ず目を通してください。

>ソースを添付する際には<pre>タグで字下げしてください。
>なるべく詳しく環境などの情報をお書きください。
は特に守られないと、回答がつくものもつかなくなります。


この投稿にコメントする

削除パスワード

No.30218

Re:平均と分散を求めるプログラム
投稿者---Hermit(2007/05/29 06:42:27)


>    int i,j,k;
>    for(i=0;i<9;i++){
>    j=0;
>    j+=s[i];
>    *mean=j/9;
>    }
とりあえずここはおかしい気はします。
*mean=j/9 の j は、for ループの中で必ず 0 に初期化されるので、
j は必ず、s[i] になりますね。

で、j/9 は、共に int なので、計算は、必ず整数になってしまいます。
最初の 12/9 は、当然 1 なので、mean は、1.0 になります。
書くなら、
  for(i=0,j=0;i<9;i++){
    j+=s[i];
  }
  *mean=(double)j/9.0;
または、
  for(i=0,*mean=0;i<9;i++){
    *mean +=(double)s[i]/9.0;
  }
くらいかな。



この投稿にコメントする

削除パスワード

No.30219

Re:平均と分散を求めるプログラム
投稿者---επιστημη(2007/05/29 06:48:38)
http://blogs.wankuma.com/episteme/


>/* 合計を求める関数 */
>void a(int *s, int n, double *mean, double *variance)
>{
> int i,j,k;
> for(i=0;i<9;i++){
> j=0;
> j+=s[i];
> *mean=j/9;
> }
> for(i=0;i<9;i++)
>k+=(((s[i]-(*mean))*(s[i]-(*mean)))/9);
> *variance=k;
>
>}

第二引数 int n はどこいった?



この投稿にコメントする

削除パスワード

No.30220

Re:平均と分散を求めるプログラム
投稿者---acid(2007/05/29 09:47:51)


変数と同じ名前の関数は使えません。

>for(i=0;i<9;i++){
> j=0;
> j+=s[i];
> *mean=j/9;
>}
分散の方は今一分からないけど、meanって平均だよな。
何で毎回ループするごとにmeanの計算してるの?
あと、iは初期化してるのに、kは初期化されてない。

つか直しても正しい答えが出ないから、何でかなーと思ったら、
そもそも関数に配列の先頭渡してないじゃん!
オーバーフローだよ!


この投稿にコメントする

削除パスワード

No.30221

Re:平均と分散を求めるプログラム
投稿者---kokosan60(2007/05/29 18:37:47)


一応字下げしたつもりだったのですがしていなかったようですみません。
環境はVisualStudio 2005です。
書いていなくて申し訳ありませんでした。


この投稿にコメントする

削除パスワード

No.30231

Re:平均と分散を求めるプログラム
投稿者---TMC(2007/05/29 21:35:29)


>一応字下げしたつもりだったのですがしていなかったようですみません。

その後、自分の投稿は確認画面ボタンで確認するかと思いきや、完全に無視していますね。


この投稿にコメントする

削除パスワード

No.30224

Re:平均と分散を求めるプログラム
投稿者---kokosan60(2007/05/29 19:17:52)


平均はうまくできたのですが、分散の値が間違った値になってしまいます。分散の計算部分でどこが間違っているのでしょうか。
#include <stdio.h>
void b(int *s, int n, double *mean, double *variance);

int main(void)
{
int i, n;
int a[]={12, 17, 99, 48, 45, 23, 12, 56, 100}; double heikin, bunsan;
n=9;
b(&a,n,&heikin,&bunsan);

printf("平均=%f 分散=%f\n",heikin,bunsan);

return (0);
}

/* 合計を求める関数 */
void b(int *s, int n, double *mean, double *variance)
{
int i,k;
for(i=0,*mean=0;i<n;i++){
*mean +=(double)s[i]/n;
}
for(i=0;i<n;i++){
k=0;
k+=(double)(s[i]*s[i])/n;
}
*variance=k-*mean**mean;

}



この投稿にコメントする

削除パスワード

No.30225

Re:平均と分散を求めるプログラム
投稿者---επιστημη(2007/05/29 19:31:06)
http://blogs.wankuma.com/episteme/


>for(i=0;i<n;i++){
>k=0;
>k+=(double)(s[i]*s[i])/n;
>}

ループの中で k=0 やっちまってる。



この投稿にコメントする

削除パスワード

No.30226

Re:平均と分散を求めるプログラム
投稿者---kokosan60(2007/05/29 19:39:11)


分散の計算部を以下のようにしたのですが、これでも間違った値が出てしまいました。どこがいけないのでしょうか。
void b(int *s, int n, double *mean, double *variance)
{
int i,k;
k=0;
for(i=0,*mean=0;i<n;i++){
*mean +=(double)s[i]/n;
}
for(i=0;i<n;i++){
k+=(double)(s[i]*s[i])/n;
}
*variance=k-*mean**mean;

}



この投稿にコメントする

削除パスワード

No.30227

Re:平均と分散を求めるプログラム
投稿者---ぽへぇ(2007/05/29 20:53:50)


>b(&a,n,&heikin,&bunsan);

これで本当にビルドが通った?
というツッコミはさておき、

>分散の値が間違った値になってしまいます
期待している値はどのくらいの値なんですか?
それが解れば、どの辺で間違っているのかも自力で検討が付くかも…



この投稿にコメントする

削除パスワード

No.30230

Re:平均と分散を求めるプログラム
投稿者---Hermit(2007/05/29 21:20:23)


標準偏差が欲しいんでしょうか?


この投稿にコメントする

削除パスワード

No.30232

Re:平均と分散を求めるプログラム
投稿者---επιστημη(2007/05/29 21:44:25)
http://blogs.wankuma.com/episteme/


>void b(int *s, int n, double *mean, double *variance)
>{
>int i,k;
>k=0;
>for(i=0,*mean=0;i<n;i++){
>*mean +=(double)s[i]/n;
>}
>for(i=0;i<n;i++){
>k+=(double)(s[i]*s[i])/n;
>}
>*variance=k-*mean**mean;
>
>}

kはintでいいのかしら?



この投稿にコメントする

削除パスワード

No.30236

Re:平均と分散を求めるプログラム
投稿者---acid(2007/05/30 09:49:44)


いいかげんHTML変換ツールを使え…

>*variance=k-*mean**mean;
典型的な分かり辛い計算式だな。
ちゃんと括弧を付けないと、乗算の*なのかポインタの*なのか分からん。

*variance = k- ( (*mean) * (*mean) );


学生を辞めて一年以上経つと、分散の求め方なんてちっとも覚えてないな。
投稿者は聞く時に、期待値なり求め方なりを書いて欲しい。


この投稿にコメントする

削除パスワード

No.30239

Re:平均と分散を求めるプログラム
投稿者---kokosan60(2007/05/30 21:26:56)


kをdoubleにすることで解決できました。
ありがとうございました。
※HTML変換ツールはちゃんと使用しています。


この投稿にコメントする

削除パスワード

No.30244

Re:平均と分散を求めるプログラム
投稿者---επιστημη(2007/05/31 01:20:18)
http://blogs.wankuma.com/episteme/


>※HTML変換ツールはちゃんと使用しています。

ぢゃなんでコードが全部左詰めなんよ?



この投稿にコメントする

削除パスワード

No.30246

Re:平均と分散を求めるプログラム
投稿者---ネカフェからの通りすがり(2007/05/31 07:53:34)


>>※HTML変換ツールはちゃんと使用しています。
>ぢゃなんでコードが全部左詰めなんよ?

正しく変換ツールを使っていても左詰になっている。
ということならば、最初から左詰で書いているとか?
元々インデント切っていない状態ならば、変換ツール使ってもインデントは入らないですから。



この投稿にコメントする

削除パスワード

No.30247

Re:平均と分散を求めるプログラム
投稿者---bugs(2007/05/31 08:39:19)


>ということならば、最初から左詰で書いているとか?

くだんの投稿のHTMLソースを見る限り、
変換ツールを使っていないか、または
使っていても後からpreタグをはずしているか、
のどちらかであるように見受けられました。

HTMLソースではインデントのための空白がありますが、
preタグがないために無視している、という状態です。


この投稿にコメントする

削除パスワード

No.30256

Re:平均と分散を求めるプログラム
投稿者---TMC(2007/05/31 16:17:05)


確認画面で確認すれば、投稿前にそのようなケースは未然に防げるはずですよね。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧