ページ 1 / 1
単語の長さを縦にヒストグラム化する関数
Posted: 2007年7月07日(土) 15:51
by parapara
お久しぶりです、何ヶ月ぶりですが、またお世話になります。
独学で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)を表示するプログラムを改変して作ってるので見にくいと思いますが、何卒ご指導・ご指摘お願いします。
Re:単語の長さを縦にヒストグラム化する関数
Posted: 2007年7月07日(土) 16:02
by box
This is a program written by C Language.
という文に出てくる単語の長さは、それぞれ
This : 4
is : 2
a : 1
program : 7
written : 7
by : 2
C : 1
Language : 8
ですね。これを、縦方向に'*'を並べたヒストグラムで表現すると、
例えばこんな風になります。
*
* * *
* * *
* * *
* * * *
* * * *
* * * * * *
* * * * * * * *
各々の単語は、どのように表示したいですか?それとも、表示しなくてよいですか?
Re:単語の長さを縦にヒストグラム化する関数
Posted: 2007年7月07日(土) 16:21
by parapara
まだ、K&R(29ページ)始めたばかりなんで表示しなくてもいいです。
俺が作ったプログラムだと逆さまなんですが、一応あってるといえるでしょうか?
box様の示したようなプログラムだと、i番目の単語の長さlの中から最大の長さ(最大値)
を求めなくちゃ作れない気がするんですけど、最大値を求めなくてエレガントに書く方法があるんでしょうか?
Re:単語の長さを縦にヒストグラム化する関数
Posted: 2007年7月07日(土) 17:55
by box
> 俺が作ったプログラムだと逆さまなんですが、一応あってるといえるでしょうか?
縦方向のヒストグラムであることに変わりはないので、
全く問題ありません。
> box様の示したようなプログラムだと、i番目の単語の長さlの中から最大の長さ(最大値)
> を求めなくちゃ作れない気がするんですけど、最大値を求めなくてエレガントに書く方法があるんでしょうか?
私が図示した結果を得たい場合、
あらかじめ最大値を求めておくことは必須だと思います。
最大値を求めておかずにその結果を得る方法は、
今のところちょっと思いつかないです。
Re:単語の長さを縦にヒストグラム化する関数
Posted: 2007年7月07日(土) 18:27
by Hermit
ヒストグラムって、度数分布じゃなかったでしょうか?
それだと単なる棒グラフな気がしますが。>box
Re:単語の長さを縦にヒストグラム化する関数
Posted: 2007年7月07日(土) 18:44
by Hermit
This : 4
is : 2
a : 1
program : 7
written : 7
by : 2
C : 1
Language : 8
だから、
1:**
2:**
3:
4:*
5:
6:
7:**
8:*
を縦に書くのではないでしょうか。
(前の、削除キー入れ忘れたので、追加でコメント)
Re:単語の長さを縦にヒストグラム化する関数
Posted: 2007年7月07日(土) 18:50
by box
> ヒストグラムって、度数分布じゃなかったでしょうか?
そうですね。
大きな間違いでした。
Re:単語の長さを縦にヒストグラム化する関数
Posted: 2007年7月07日(土) 20:35
by parapara
皆さん、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-->