単語の長さを縦にヒストグラム化する関数

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

単語の長さを縦にヒストグラム化する関数

#1

投稿記事 by parapara » 18年前

お久しぶりです、何ヶ月ぶりですが、またお世話になります。
独学でC言語を勉強してる物ですが、問題文中のヒストグラムの単語の意味があまり良く分からないので教えてください。
PCはDELLのディメンション8300です。
コンパイラはMicrosoft Visual C++ .NET   55577-640-4383485-18159
説明不足だと思いますが、以下の状況(*の数でグラフを作ってる)です。
これでヒストグラムを作ってるといえますでしょうか?
#include<stdio.h>//単語の数
#include<string.h>
#define OUT 0
#define IN  1
int main(void){
	int c,nl,nw,nc,state,l[1000],i,j;
	state=OUT;
	nl=nw=nc=i=0;
	for(i=0;i<1000;i++){
		l=0;
	}i=0;
	while((c=getchar())!=EOF){
		nc++;
		if(c=='\n')nl++;
		if(c==' '||c=='\t'||c=='\n'){
			if(state==IN)i++;
			state=OUT;
		}else if(state==OUT){
			l++;
			state=IN;
			nw++;
		}else if(state==IN){
			l++;
		}
	}
	c=i;j=0;
	for(i=0;i<26;i++){//最大の単語の長さ
		for(j=0;j<c;j++){//i単語の数
			if(i<l[j]){//l単語の長さ
				printf("*");
			}
			putchar('\t');
		}
		putchar('\n');
	}
	return(0);
}
行の数(nl)・単語の数(nw)・文字の数(nc)を表示するプログラムを改変して作ってるので見にくいと思いますが、何卒ご指導・ご指摘お願いします。

box

Re:単語の長さを縦にヒストグラム化する関数

#2

投稿記事 by box » 18年前

This is a program written by C Language.
という文に出てくる単語の長さは、それぞれ

This : 4
is : 2
a : 1
program : 7
written : 7
by : 2
C : 1
Language : 8

ですね。これを、縦方向に'*'を並べたヒストグラムで表現すると、
例えばこんな風になります。

              *
      * *     *
      * *     *
      * *     *
*     * *     *
*     * *     *
* *   * * *   *
* * * * * * * *

各々の単語は、どのように表示したいですか?それとも、表示しなくてよいですか?

parapara

Re:単語の長さを縦にヒストグラム化する関数

#3

投稿記事 by parapara » 18年前

まだ、K&R(29ページ)始めたばかりなんで表示しなくてもいいです。
俺が作ったプログラムだと逆さまなんですが、一応あってるといえるでしょうか?
box様の示したようなプログラムだと、i番目の単語の長さlの中から最大の長さ(最大値)
を求めなくちゃ作れない気がするんですけど、最大値を求めなくてエレガントに書く方法があるんでしょうか?

box

Re:単語の長さを縦にヒストグラム化する関数

#4

投稿記事 by box » 18年前

> 俺が作ったプログラムだと逆さまなんですが、一応あってるといえるでしょうか?

縦方向のヒストグラムであることに変わりはないので、
全く問題ありません。

> box様の示したようなプログラムだと、i番目の単語の長さlの中から最大の長さ(最大値)
> を求めなくちゃ作れない気がするんですけど、最大値を求めなくてエレガントに書く方法があるんでしょうか?

私が図示した結果を得たい場合、
あらかじめ最大値を求めておくことは必須だと思います。
最大値を求めておかずにその結果を得る方法は、
今のところちょっと思いつかないです。

Hermit

Re:単語の長さを縦にヒストグラム化する関数

#5

投稿記事 by Hermit » 18年前

ヒストグラムって、度数分布じゃなかったでしょうか?
それだと単なる棒グラフな気がしますが。>box

Hermit

Re:単語の長さを縦にヒストグラム化する関数

#6

投稿記事 by Hermit » 18年前

This : 4
is : 2
a : 1
program : 7
written : 7
by : 2
C : 1
Language : 8

だから、

1:**
2:**
3:
4:*
5:
6:
7:**
8:*

を縦に書くのではないでしょうか。

(前の、削除キー入れ忘れたので、追加でコメント)

box

Re:単語の長さを縦にヒストグラム化する関数

#7

投稿記事 by box » 18年前

> ヒストグラムって、度数分布じゃなかったでしょうか?

そうですね。
大きな間違いでした。

parapara

Re:単語の長さを縦にヒストグラム化する関数

#8

投稿記事 by parapara » 18年前

皆さん、box様色々ご指導ご指摘ありがとうございます。
This : 4 
is : 2 
a : 1 
program : 7 
written : 7 
by : 2 
C : 1 
Language : 8 

だから、 

1:** 
2:** 
3: 
4:* 
5: 
6: 
7:** 
8:* 
を縦に書くのではないでしょうか。
を元に考えていこうと思います。
<!--13-->

閉鎖

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