コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

標準偏差を求めるプログラム

ポケコンぽいスクロールができるようになったので、標準偏差を求めるプログラムを作ってみました。
実行するとこのような表示になります。

以下がプログラムです。

------------------------------------------
--標準偏差を求めるプログラム(テキストスクロールサンプル)
------------------------------------------
--関数宣言--------------------------------
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します。そうすると、平均と分散と標準偏差を計算します。
ポケコンぽいでしょうか。