HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0407
kazuya上位5個を棒グラフを表示させる方法がわかりません。6未解決


kazuya

リンク

2012/4/7(Sat) 16:16:57|NO.45930

はじめまして、よろしくお願いします。
データを取っていって、
その上位5個を棒グラフを表示させる方法がわかりません。
教えて下さい。


実行例

No. 0 data = 24
No. 1 data = 12
No. 2 data = 10
No. 3 data = 5
No. 4 data = 28
No. 5 data = 4
No. 6 data = 12
No. 7 data = 4
No. 8 data = 2
No. 9 data = 7

1位 No.4:****************************
2位 No.0:************************
3位 No.1:************
4位 No.6:************
5位 No.2:**********



この記事に返信する


cats

リンク

2012/4/7(Sat) 16:38:18|NO.45932




check

リンク

2012/4/7(Sat) 16:46:16|NO.45934

データを配列変数に入れる。
そして、配列の先頭の数が一番でかいものとしてとりあえず記録しておき、
要素の1つ1つと比較していき、記録してあるデータより大きい数字がきたら
記録してあるデータをその数字に変え、同時にその配列の番号も記録していく。
最後まで繰り返せば配列のどのデータが一番大きいかが分かる。

上位5つならそれを5回繰り返す(一度検索して、大きさの順序が出たものは飛ばす)。
これで上位5つのデータが取得できる。
後は好きにグラフを描画すれば良い。


randomize dim data, 10 // dataにランダムに数字を格納 repeat 10 data(cnt) = rnd(100) loop // 一時的に最大値を保持する変数 maxvalue = data(0) // 最大値が格納されている配列のインデックス index = 0 // 最大値の検索 repeat 9, 1 if data(cnt) > maxvalue { maxvalue = data(cnt) index = cnt } loop repeat 10 mes data(cnt) loop mes "\n最大値は " + maxvalue + " で、配列のインデックスは " + index + "です。"



kazuya

リンク

2012/4/8(Sun) 16:25:18|NO.45954

cats様、check様、ありがとうございました。
とくにcheck様、親切に有難うございました。
あとは出来るだけ自分で頑張ってみます。



EA

リンク

2012/5/5(Sat) 02:10:54|NO.46452

> データを取っていって、
> その上位5個を棒グラフを表示させる方法がわかりません。
誤ってHSP3掲示板(サブ掲示板?)のほうに書き込んでしまいました。
もう解決済みかもしれませんが、一応追加しておきます。
サブのほうに書き込んだものとは変数名を変えています。
ちょっと分かりずらかったので。

バブルソートが簡単でお勧めです(処理は遅いけど)。
処理の手順はソートアルゴリズムとか基本交換法とかで検索してください。

#データを用意 data_arr=24,12,10,5,28,4,12,4,2,7;データ no_arr=0,1,2,3,4,5,6,7,8,9;No data1=0:data2=0:data3=0:data4=0; str_tmp=""; #ソート前のデータを表示 repeat length(data_arr) str_tmp+=str(no_arr(cnt))+"="+str(data_srr(cnt)); if(cnt<length(data_arr)-1){ str_tmp+=","; } loop mes "ソート前:"+str_tmp; str_tmp=""; #ソート部分 repeat length(data_arr)-1 repeat length(data_arr)-1-i data1=data_arr(cnt); data2=data_arr(cnt+1); data3=no_arr(cnt); data4=no_arr(cnt+1); #比較演算子を逆向きにすれば小さい順に並ぶ if(data1<data2){ data_arr(cnt)=data2; data_arr(cnt+1)=data1; no_arr(cnt)=data4; no_arr(cnt+1)=data3; } loop i++; loop #ソート後のデータを表示 repeat length(data_arr) str_tmp+=str(no_arr(cnt))+"="+str(data_arr(cnt)); if(cnt<length(data_arr)-1){ str_tmp+=","; } loop mes "ソート後:"+str_tmp; #順位となんちゃって棒グラフを表示 repeat 5 str_tmp=str(cnt+1)+"位 No."+str(no_arr(cnt))+":"; repeat data_arr(cnt) str_tmp+="*"; loop mes strtmp; loop
適当に書いたので参考程度に。



EA

リンク

2012/5/5(Sat) 02:45:48|NO.46453

最後から2行目、変数名間違ってました。
誤:mes strtmp
正:mes str_tmp
あと、私もHSP初心者なので命令文の書き方が変かもしれません。
今までの癖でdimとかsdim使わなかったり、文の最後に;を打ちたくて仕方ありません。
癖みたいなものでお見苦しいかもしれませんが、笑って許してくださいな。



EA

リンク

2012/5/5(Sat) 03:05:38|NO.46454


#ソート前のデータを表示 repeat length(data_arr) str_tmp+=str(no_arr(cnt))+"="+str(data_srr(cnt));
ここも間違っちゃってますね(涙)。正しくは、

#ソート前のデータを表示 repeat length(data_arr) str_tmp+=str(no_arr(cnt))+"="+str(data_arr(cnt));
でした。鼻で笑ってやってください。
あと、#ソート部分とrepeat length(data_arr)-1の間にi=0;を1行書き足しておくと安心かも?
ぐだぐだで済まぬ。



ONION software Copyright 1997-2023(c) All rights reserved.