標準偏差を求めるプログラム
ポケコンぽいスクロールができるようになったので、標準偏差を求めるプログラムを作ってみました。
実行するとこのような表示になります。
以下がプログラムです。
------------------------------------------ --標準偏差を求めるプログラム(テキストスクロールサンプル) ------------------------------------------ --関数宣言-------------------------------- main={} --mainメソッド printscrl={} --スクロール有り文字表示 ------------------------------------------ mt={} mt.__newindex=function(mtt,mtn,mtv) dialog( "Error Message", "宣言していない変数 "..mtn.." に値を入れようとしています", 0 ) toast("画面タッチで実行を続けます", 1) touch(3) end mt.__index=function(mtt,mtn) dialog( "Error Message", "変数 "..mtn.." は宣言されていません", 0 ) toast("画面タッチで実行を続けます", 1) touch(3) end setmetatable(_G,mt) --------以下が実プログラム---------------- ------------------------------------------ --スクロールするテキスト表示 ------------------------------------------ function printscrl( str, fontsize, fcolor, bcolor ) local w,h = canvas.getviewSize() local sc --一度、見えないところにテキストを書いて、改行数を求める sc = canvas.drawTextBox( str, 0, h+1, fontsize, fcolor, w ) --画面の絵をワークエリアに取り込みます canvas.getg( 0, fontsize*sc, w-1, h-1, 0, fontsize*sc, w-1, h-1 ) --取り込んだ画面をスクロールさせて描きます canvas.putg( 0, 0, w-1, h-fontsize*sc-1, 0, fontsize*sc, w-1, h-1 ) --書き出す部分をバックカラーで塗り潰します canvas.drawRect( 0, h-fontsize*sc-1, w, h, bcolor, 1 ) --フラッシュします canvas.putflush() --スクロールしたところにテキストを書きます canvas.drawTextBox( str, 0, h-fontsize*sc, fontsize, fcolor, w ) end ------------------------------------------ --メインプログラム ------------------------------------------ function main() local n = 0 local c local a local x={} local av local va local sd canvas.drawCls( color(255,255,255) ) printscrl( "標準偏差を求めます", 20, color(0,0,0), color(255,255,255) ) while(true)do c,a = editText("値を入力してください") if( a==nil or c==nil or c=="" or tonumber(c)==nil )then break end if( a==1 )then n = n + 1 x[n] = tonumber(c) printscrl( "データ "..n..": "..x[n], 20, color(0,0,0), color(255,255,255) ) else break end end if( n==0 )then return end --平均を求めます av = 0 for i=1,n do av = av + x[i] end av = av / n printscrl( "平均: "..av, 20, color(0,0,0), color(255,255,255) ) --分散を求めます va = 0 for i=1,n do va = va + (x[i]-av)*(x[i]-av) end va = va / n printscrl( "分散: "..va, 20, color(0,0,0), color(255,255,255) ) --標準偏差を求めます sd = math.sqrt(va) printscrl( "標準偏差: "..sd, 28, color(255,0,0), color(255,255,255) ) toast("画面タッチで終了します",0) touch(3) end main()
データを1つずつ入力し、終わったら、Cancelします。そうすると、平均と分散と標準偏差を計算します。
ポケコンぽいでしょうか。