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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0420
WHOS数字を計算する。4解決


WHOS

リンク

2012/4/20(Fri) 20:52:11|NO.46188

以前もお世話になりました。仕事で使うため統計ソフトを作っています。
テキストから数字[0~37]を取り出しその数字の確立を求めるソフトを作っています。

※出現率が一定の確立以上の物を青
下回っている確立の数字を赤で表示しています。

以下SAMPLE(大変長いスクリプトで申し訳ございません。)

#include "user32.as" pos 10,10 : objsize 380,22 button "OpenFile",*OpenFile stop *OpenFile color 255,255,255 boxf 1000,1000,0,0 dialog "txt", 16, "テキスト" if stat = 0 { stop } notesel data noteload refstr pos 10,10 split data,",",pdata : TESTS = stat dim cdata,37 repeat TESTS cdata( int(pdata(cnt)) )+ loop repeat 37 wait 5 c=cdata(cnt) if c { a = double(c)/TESTS*100 if a < 2.702703 : color 255,000,000 : else : color 000,000,255 print ""+cnt+":"+c+"/"+TESTS+"("+strf("%.2f",a)+"%)" : NInts = cnt } *ReturnMode color 255,000,000 SInts = cnt : if NInts = SInts :: else : print "" +cnt+ ":0/" +TESTS+ "(0.00%)" loop

上記は数字を[0~37]の順番で表示しているのですが
出現率(確立)の高い順に数字を表示する。
上記とは別に[0,32,15,19,4,21,2,25,17,34,6,27,13,36,11,30,8,23,10,5,24,16,33,1,20,14,31,9,22,18,29,7,28,12,35,3,26]の順番で表示する事を実現したいのです。

変数配列に確立を入れてその全ての数字の大きさを比較しようと思い色々ググって調べてみたのですが自分には厳しいようでしたOrz
ヒントでも良いので誰かアドバイスお願いします。回答待っています。(出来れば急ぎでお願いしたいですOrz)



この記事に返信する


てれてれ

リンク

2012/4/20(Fri) 21:29:02|NO.46191

急ぎとのことなので、説明手抜きです。
cntの代わりにsortの配列を使用してます。

#include "user32.as" pos 10,10 : objsize 380,22 button "OpenFile",*OpenFile sort = 0,32,15,19,4,21,2,25,17,34,6,27,13,36,11,30,8,23,10,5,24,16,33,1,20,14,31,9,22,18,29,7,28,12,35,3,26 //ソート順 stop *OpenFile color 255,255,255 boxf 1000,1000,0,0 dialog "txt", 16, "テキスト" if stat = 0 { stop } notesel data noteload refstr pos 10,10 split data,",",pdata : TESTS = stat dim cdata,37 repeat TESTS cdata( int(pdata(cnt)) )+ loop font msgothic,12 : pos 10,32 //fontいじる repeat 37 wait 5 cn = sort(cnt) //cntの代わりにsortを c=cdata(cn) if c { a = double(c)/TESTS*100 if a < 2.702703 : color 255,000,000 : else : color 000,000,255 print ""+cn+":"+c+"/"+TESTS+"("+strf("%.2f",a)+"%)" : Nints = cn } *ReturnMode color 255,000,000 SInts = cn : if NInts = SInts :: else : print "" +cn+ ":0/" +TESTS+ "(0.00%)" loop



てれてれ

リンク

2012/4/20(Fri) 21:58:13|NO.46194

出現率の高い順

#include "user32.as" pos 10,10 : objsize 380,22 button "OpenFile",*OpenFile stop *OpenFile color 255,255,255 boxf 1000,1000,0,0 dialog "txt", 16, "テキスト" if stat = 0 { stop } notesel data noteload refstr pos 10,10 split data,",",pdata : TESTS = stat dim cdata,37 Maxcn = -1 repeat TESTS cdata( int(pdata(cnt)) )+ if Maxcn <= cdata( int(pdata(cnt)) ) : Maxcn = cdata( int(pdata(cnt)) ) //cdataの最大値をMaxcnに入れる loop dim sort,37 : sortid = 0 //sort初期化 repeat Maxcn+1 : cn = Maxcn-cnt repeat 37 if cdata( cnt ) = cn : sort( sortid ) = cnt : sortid++ //cdataの大きい順にsortに代入 loop loop font msgothic,12 : pos 10,32 //fontいじる repeat 37 wait 5 cn = sort(cnt) //cntの代わりにsortを c=cdata(cn) if c { a = double(c)/TESTS*100 if a < 2.702703 : color 255,000,000 : else : color 000,000,255 print ""+cn+":"+c+"/"+TESTS+"("+strf("%.2f",a)+"%)" : Nints = cn } *ReturnMode color 255,000,000 SInts = cn : if NInts = SInts :: else : print "" +cn+ ":0/" +TESTS+ "(0.00%)" loop await



暇人

リンク

2012/4/21(Sat) 03:20:30|NO.46195

NO.46188、46191、46194を全部合わせた感じ

screen 0,640,800 pos 10,10 : objsize 380,22 button "OpenFile",*OpenFile stop *OpenFile color 255,255,255 boxf 1000,1000,0,0 dialog "txt", 16, "テキスト" if stat = 0 { stop } notesel data noteload refstr split data,",",pdata : TESTS = stat dim cdata,37 repeat TESTS cdata( int(pdata(cnt)) )+ loop dim color_typ,37 sdim print_dat,100,37 pos 10,50 repeat 37 c=cdata(cnt) a = double(c)/TESTS*100 if a < 2.702703 { color_typ(cnt)=1} else { color_typ(cnt)=2} print_dat(cnt)=""+cnt+":"+c+"/"+TESTS+"("+strf("%.2f%%)",a) loop sort=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36 pos 10,50 gosub *draw //sort順に表示 sort=0,32,15,19,4,21,2,25,17,34,6,27,13,36,11,30,8,23,10,5,24,16,33,1,20,14,31,9,22,18,29,7,28,12,35,3,26 pos 160,50 gosub *draw //****多い順にソート dim temp,TESTS Maxcn=0 repeat 37 c=cdata(cnt) temp(c)+ //個数を要素にカウンタを増やす if Maxcn < c : Maxcn = c //cdataの最大値をMaxcnに入れる loop dim sort,37 : sortid = 0 //sort初期化 cn = Maxcn //個数の最大から比較するので最大値をセット repeat Maxcn+1 //0個もソートするから+1 if temp(cn) > 0 { //カウンタが1以上ならソート処理 repeat 37 if cdata( cnt ) = cn { sort( sortid ) = cnt : sortid++ :temp(cn)-} //cdataの大きい順にsortに代入してカウンタを減らす if temp(cn)=0{break} loop } cn- //比較する個数を減らしてく loop pos 310,50 gosub *draw stop *draw repeat 37 wait 1 cn=sort( cnt ) if color_typ(cn)<2 {color 255,000,000}else{color 000,000,255} mes print_dat(cn) loop return
>以下SAMPLE(大変長いスクリプトで申し訳ございません。)
長くは無いと思うけどnoteload refstr行まではdata="11,30,8,23,10"
とかやっとけば必要なかった気がする(コピペですぐ実行できるし)



WHOS

リンク

2012/4/30(Mon) 15:05:06|NO.46374

返答が遅くなって申し訳ございません。
即急にソースコードまで頂きありがとうごいざいます。
お陰様で間に合いました。本当にありがとうございました。



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