|
 |
|
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"
とかやっとけば必要なかった気がする(コピペですぐ実行できるし)

| |
|
2012/4/30(Mon) 15:05:06|NO.46374
返答が遅くなって申し訳ございません。
即急にソースコードまで頂きありがとうごいざいます。
お陰様で間に合いました。本当にありがとうございました。
|
|