2次元配列 平均値

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
x最強

2次元配列 平均値

#1

投稿記事 by x最強 » 6年前

コード:


#include "stdio.h"
#include "stdlib.h"

//関数のプロトタイプ宣言
void	f_init( int, int, int [][5] );
void	f_pout( int, int, int [][5] );
void	f_max( int , int , int [][5] );
void	f_min( int, int, int [][5] );
void	f_ave( int , int , int [][5] );

int main()
{
	int		row = 3, col = 5;
	int		data1[3][5];

	f_init( row, col, data1 );
	f_pout( row, col, data1 );
	printf("\n");
	f_max( row, col, data1 );
	f_min( row, col, data1 );
	f_ave( row, col, data1 );
	return	1;
}

void	f_init( int row, int col, int dat[][5] )
{
	int	i, j;

	for( i = 0; i < row; i++ )
	{
		for( j = 0; j < col; j++ )
		{
			dat[i][j] = rand() % 100;
		}
	}
}

void	f_pout( int row, int col, int dat[][5] )
{
	int	i, j;

	for( i = 0; i < row; i++ )
	{	for( j = 0; j < col; j++ )
		{
			printf( "%4d", dat[i][j] );
		}
		printf( "\n" );
	}
}

void	f_max( int row, int col, int dat[][5] )
{
	int i, j, k;
	int Amax[5], max[5];

	for( i = 0; i < row; i++ ){
		for( j = 0; j < col; j++ ){
			if( dat[i][j] > max[j] ){
					max[j] = dat[i][j];
					Amax[j] = max[j];
			}
		}
	}
	for( k = 0; k < col; k++ ){
		printf("%4d", Amax[k]);
	}
		printf("\n");
}

void	f_min( int row, int col, int dat[][5] )
{
	int i, j, k;
	int Amin[5], min[5] = {99,99,99,99,99} ;

	for( i = 0; i < row; i++ ){
		for( j = 0; j < col; j++ ){
			if( dat[i][j] < min[j] ){
				min[j] = dat[i][j];
				Amin[j] = min[j];
			}
		}
	}
	for( k = 0; k < col; k++ ){
		printf("%4d", Amin[k]);
	}
	printf("\n");
}

void	f_ave( int row, int col, int dat[][5] )
{
	int i, j;
	int sum = 0;
	int Asum[5];

	for( i = 0; i < row; i++ ){
		for( j = 0; j < col; j++ ){
			sum = dat[i][j];
			Asum[j] = (double)sum / 3;
			printf("%4d", Asum[j]);
		}
		printf("\n");
	}
}
}
実行結果
/*2次元配列*/
41 67 34 0 69 
24 78 58 62 64
5 45 81 27 61

/*max値*/
41 78 81 62 69
/*min値*/
5 45 34 0 61
/*平均値???*/
13 22 11 0 23
8 26 19 20 21
1 15 27 9 20

この平均値がうまくいきません
この表示3つ足してなおかつdouble型で表示がしたいんですが、、、
ご教授願えませんでしょうか
お願いします

初級者
記事: 200
登録日時: 9年前

Re: 2次元配列 平均値

#2

投稿記事 by 初級者 » 6年前

平均値の前に、最大値と最小値は
思ったとおりの結果が
出ているのでしょうか。

x最強

Re: 2次元配列 平均値

#3

投稿記事 by x最強 » 6年前

こちらでは一応出てますが、、、
なにか問題あったでしょうか?

コード:

void	f_ave( int row, int col, int dat[][5] )
{
	int i, j;
	int sum = 0;
	double Asum[5];

	for( i = 0; i < row; i++ ){
		for( j = 0; j < col; j++ ){
			sum += dat[i][j];
			Asum[j] = (double)sum / 3;
			printf("\t%.1lf", Asum[j]);
		}
		printf("\n");
	}
}
少々書き換えしました

アバター
みけCAT
記事: 6252
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 2次元配列 平均値

#4

投稿記事 by みけCAT » 6年前

f_ave関数のrowとcolのループの順番を逆にし、1行ずつ処理するといいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6252
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 2次元配列 平均値

#5

投稿記事 by みけCAT » 6年前

さらに、入れ替えたあとのrowのループが始まる直前で、sumを0に初期化してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

x最強

Re: 2次元配列 平均値

#6

投稿記事 by x最強 » 6年前

あれ、こういうことじゃないですよね?
う~ん、わかりません

コード:

void	f_ave( int row, int col, int dat[][5] )
{
	int i, j;
	int sum;
	double Asum[5];

	for( j = 0; j < col; j++ ){
		sum = 0;
		for( i = 0; i < row; i++ ){

			sum = dat[i][j];
			Asum[j] = (double)sum / 3;
			printf("\t%.1lf", Asum[j]);
		}
		printf("\n");
	}
}

アバター
みけCAT
記事: 6252
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 2次元配列 平均値

#7

投稿記事 by みけCAT » 6年前

惜しいです。
sum = dat[j]; ではなく、sum += dat[j];ですね。
ついでに、割る数も3固定ではなく、rowを使うといいですね。

オフトピック
本当に求められている仕様がこれでいいのか確定しませんが
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

x最強

Re: 2次元配列 平均値

#8

投稿記事 by x最強 » 6年前

お?手探りでやったらできましたよぉ~!
こういうことでおkでしょうか?

コード:


void	f_ave( int row, int col, int dat[][5] )
{
	int i, j;
	int sum;

	for( j = 0; j < col; j++ ){
		sum = 0;
		for( i = 0; i < row; i++ ){

			sum += dat[i][j];
		}
		printf( " %lf",(double)sum/row );
	}
}

アバター
みけCAT
記事: 6252
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 2次元配列 平均値

#9

投稿記事 by みけCAT » 6年前

現代のコンパイラでは、printfでdouble型のデータを表示するときは%lfではなく%fを使用します。
苦C さんが書きました:double型の表示に使うのは、%fが正解です。
そもそも出力変換指定子には、%lfは存在していません。
しかし、現在では%lfでもほとんどのコンパイラで通ります。
http://9cguide.appspot.com/r_mark.html

あとの解釈はあっています。おkかどうかは、自分でテストしてみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

x最強

Re: 2次元配列 平均値

#10

投稿記事 by x最強 » 6年前

なるほど、そうだったんですね~
親切に教えていただき、ありがとうございます。
実はですね、この課題の進化系みたいなのもあるんですが、、、
それは後日分からなければ、質問させていただきます
その時はよろしくお願いしてもよろしいでしょうか?

本日は本当にありがとうございました~!

アバター
みけCAT
記事: 6252
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 2次元配列 平均値

#11

投稿記事 by みけCAT » 6年前

x最強 さんが書きました:実はですね、この課題の進化系みたいなのもあるんですが、、、
それは後日分からなければ、質問させていただきます
その時はよろしくお願いしてもよろしいでしょうか?
フォーラムルールを守っていただけるなら、もちろんいいと思います。

解決したようでしたら、解決チェックをお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

x最強

Re: 2次元配列 平均値

#12

投稿記事 by x最強 » 6年前

スッキリ! = 解決!

いいサイトです!!!

閉鎖

“C言語何でも質問掲示板” へ戻る