グラフについて

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

グラフについて

#1

投稿記事 by saaya » 12年前

いくつかのデータを入力し、最大のデータを50個の■で表して他のデータはそれに比例する個数の■で表したいのですがうまくいきません。
例えば、データの個数を5個に指定し、データを「5,4,2,3,1」の順で入力するときちんと「50,40,20,30,10」個の■が表示されるのですが、データの順番を「2,1,3,5,4,」の順で入力すると最初の3つが全部50個表示されてしまう、といった具合です。
もしよろしければ訂正すべきところなどアドバイスお願いします。

コード:

#include <stdio.h>

int main (int argc, const char * argv[]){
	const int N = 100;
	int n, i, j, max;
	int data[N], graph[N];
	max = 0;

	printf("整数データの個数 n = ");
	scanf("%d", &n);
	printf("データを入力:\n");
	for (i = 0; i < n; i++){
		printf("data[%d] = ", i);
		scanf("%d", &(data[i]));
	}
	
	for (i = 0; i < n; i++){
		printf("%3d ", data[i]);
		if(max < data[i]){
			max = data[i];
		}
		graph[i] = 50 * data[i] / max;
		for (j = 0; j < graph[i]; j++){
			printf("■");
		}
		printf("\n");
	}

	return 0;
}

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

Re: グラフについて

#2

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

「2,1,3,5,4,」の順でデータを入力したとき、
2→maxは2→50個表示される
1→maxは2→25個表示される
3→maxは3→50個表示される
5→maxは5→50個表示される
4→maxは5→40個表示される

と予想できますが、最初の3データが全て50個表示されるのは変ですね。

【追記】
今貼られているコードで試したところ、この予想通りの結果になりました。
実際に動かしているコードを貼ってください。
http://ideone.com/lLw0jK

maxの計算を出力部ではなく入力部で行うのがいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 15年前

Re: グラフについて

#3

投稿記事 by box » 12年前

みけCAT さんが書きました: maxの計算を出力部ではなく入力部で行うのがいいと思います。
その方がいい、というよりは、そうしなければならない、ということでありましょう。
今回の例では、どういう順序でデータを入力したとしても
maxは50「でなければならない」はずです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: グラフについて

#4

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

box さんが書きました:今回の例では、どういう順序でデータを入力したとしても
maxは50「でなければならない」はずです。
それは違うよ!
「5,4,2,3,1」及び「2,1,3,5,4,」というケースでは、
どちらもグラフを出力する部分の最初から最後までmaxは5でなければならないはずです。

あと、ゼロ除算を防ぐために、maxの初期値は0ではなく1のほうがいいと思います。
データの個数nが配列の要素数Nを超えた時もエラーにしたほうがいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 15年前

Re: グラフについて

#5

投稿記事 by box » 12年前

くだんのデータ例では、maxは5ですね。50ではありませんでした。
データの入力順に関係なく、まずはmaxが5であることを求めた「後で」、それを基準とする
個数分だけ■を書く、というロジックでなければならない点には変わりありません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

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