Download presentation
Presentation is loading. Please wait.
1
情報基礎Ⅱ (第11回) 月曜4限 担当:北川 晃
2
平均値と標準偏差 平均値: 標準偏差: n個のデータx1, x2, …, xnが与えられている. データを逐次読み込んで,その平均値と
標準偏差を求めよ. 平均値: 標準偏差:
3
平均値と標準偏差:具体例 (i) N≧2のとき :平均値 :標準偏差
4
プログラミング演習 外部データ’normal_data.txt’よりデータ点数および各データを読み込んで,それらの平均値を計算するプログラムを作れ. ‘normal_data.txt’を読み込みファイルとして接続する. データ点数を読み込み,nに代入する. すべてのデータを配列a(i)に代入する. すべてのデータの和sを計算する. 平均値aveを計算し,表示する.
5
出力例:平均値の計算
6
プログラム例:平均値の計算 データ点数の読み込み データを配列へ読み込む データの和の計算 平均値の計算
Dim a(10000), ave As Single, s As Single = 0, n As Integer Dim ReadText As New IO.StreamReader( _ "D:\…\normal_data.txt", System.Text.Encoding.Default) n = ReadText.ReadLine() For i As Integer = 1 To n a(i) = ReadText.ReadLine() Next s = s + a(i) ave = s / n Console.WriteLine("平均はE={0,8}", ave) ReadText.Close() データ点数の読み込み データを配列へ読み込む データの和の計算 平均値の計算
7
プログラミング演習 外部データ’normal_data.txt’よりデータ点数および各データを読み込んで,それらの平均値を計算するプログラムを作れ. 上記のプログラムをFunctionプロシージャに書き直し,平均値を計算するプログラムを作れ.
8
例題:平均値を求める関数副プログラム データ点数nとa(i) (i=1,…,n)を引数として,それらの 平均値を返す関数副プログラムを作れ.
関数プロシージャの引数には,配列を取ることも可能. 配列 Sub Main() Dim a(10), ave As Single, n As Integer … ave = ave_func(n,a) End Sub Function ave_func(n,a) Return ave End Function 配列 配列
9
平均値を求める関数副プログラム:プログラム例
Sub Main() Dim a(10000), ave As Single, n As Integer Dim ReadText As New IO.StreamReader( _ "D:\…\normal_data.txt", System.Text.Encoding.Default) n = ReadText.ReadLine() For i As Integer = 1 To n a(i) = ReadText.ReadLine() Next ReadText.Close() ave = ave_func(n, a) Console.WriteLine("平均はE={0,8}", ave) End Sub
10
平均値を求める関数副プログラム:プログラム例
Function ave_func(n, a) Dim s As Single = 0, ave As Single For i As Integer = 1 To n s = s + a(i) Next ave = s / n Return ave End Function 関数副プロシージャで, 以下のものは宣言不要 共通に宣言した変数 関数の仮引数
11
プログラミング演習 外部データ’normal_data.txt’よりデータ点数および各データを読み込んで,それらの平均値を計算するプログラムを作れ. 上記のプログラムをFunctionプロシージャに書き直し,平均値を計算するプログラムを作れ. さらに標準偏差を計算するプログラムを,Functionプロシージャを用いて作れ.
12
平均値を求める関数副プログラム:プログラム例
Sub Main() Dim a(10000), ave, sd As Single, n As Integer Dim ReadText As New IO.StreamReader( _ "D:\…\normal_data.txt", System.Text.Encoding.Default) n = ReadText.ReadLine() For i As Integer = 1 To n a(i) = ReadText.ReadLine() Next ReadText.Close() ave = ave_func(n, a) sd = sd_func(n, a, ave) Console.WriteLine("平均はE={0,8}", ave) Console.WriteLine(“標準偏差はσ={0,8}", sd) End Sub
13
平均値を求める関数副プログラム:プログラム例
Function ave_func(n, a) … Return ave End Function Function sd_func(a, ave, n) Dim s2 As Single = 0.0 Dim var, sd As Single For i As Integer = 1 To n s2 = s2 + a(i) ^ 2 Next var = s2 / n - ave ^ 2 sd = Math.Sqrt(var) Return sd
14
プログラミング演習 外部データ’normal_data.txt’よりデータ点数および各データを読み込んで,それらの平均値および標準偏差を計算するサブルーチン・プログラムを作れ.
15
Subプロシージャとは 主プログラムの一部を外部の副プログラムに移す 繰り返し同じ記述をする場合などに有効
Functionプロシージャとは異なり, 主プログラムに値は返さない 主プログラムと変数のやりとりをすることもできる プログラムで 共有する変数は,Mainよりも外で 宣言する Mainプログラムも, Subプロシージャの一つ Sub Main() … プロシージャ名(変数) End Sub Sub プロシージャ名(変数) 文ブロック 値は返さないので, “Return *”はいらない
16
通常サブルーチンは値を返せないので,サブルーチン内で結果を表示する
平均値を求めるサブルーチン:プログラム例 Sub Main() Dim a(10000), ave, sd As Single Dim n As Integer Dim ReadText As New IO.StreamReader("d:\normal_data.txt", _ System.Text.Encoding.Default) n = ReadText.ReadLine() For i As Integer = 1 To n a(i) = ReadText.ReadLine() Next ReadText.Close() ave_sub(n,a) sd_sub(n,a,ave) End Sub 通常サブルーチンは値を返せないので,サブルーチン内で結果を表示する (主プログラムの変数を書き換える ことができない)
17
平均値を求めるサブルーチン:プログラム例
Sub ave_sub(n,a) Dim s As Single = 0.0 For i As Integer = 1 To n s = s + a(i) Next ave = s / n Console.WriteLine("平均はE={0,8}", ave) End Sub Sub sd_sub(n,a,ave) Dim s2 As Single = 0.0, var As Single s2 = s2 + a(i) ^ 2 var = s2 / n - ave ^ 2 sd = Math.Sqrt(var) Console.WriteLine("標準偏差はσ={0,8}", sd) サブルーチンは,プログラムの 一部を外部に分割. 値を返すことができない.
18
平均値を求めるサブルーチン:プログラム例
Dim a(10000), ave, sd As Single Sub Main() Dim n As Integer Dim ReadText As New IO.StreamReader("d:\normal_data.txt", _ System.Text.Encoding.Default) n = ReadText.ReadLine() For i As Integer = 1 To n a(i) = ReadText.ReadLine() Next ReadText.Close() ave_sub(n) sd_sub(n) Console.WriteLine("平均はE={0,8}", ave) Console.WriteLine("標準偏差はσ={0,8}", sd) End Sub 主プログラムの外で変数を宣言する 主プログラムの変数を 書き換えているわけではない (サブルーチンで計算した 値が使える)
19
平均値を求めるサブルーチン:プログラム例
Sub ave_sub(n) Dim s As Single = 0.0 For i As Integer = 1 To n s = s + a(i) Next ave = s / n End Sub Sub sd_sub(n) Dim s2 As Single = 0.0, var As Single s2 = s2 + a(i) ^ 2 var = s2 / n - ave ^ 2 sd = Math.Sqrt(var)
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.