情報基礎Ⅱ (第6回) 月曜4限 担当:北川 晃 例題:4次式の数表 4次式 f x 1.5 x 0.8 x 6.2 x 0.5 x 2.1 4 3 2 の値を,0から0.2きざみで5.0までのxに対して計算し, 順に書き出すプログラムを作れ. Dim y As Single For x As Single = 0.0 To 5.0 Step 0.2 y = 1.5 * x ^ 4 - 0.8 * x ^ 3 _ + 6.2 * x ^ 2 + 0.5 * x + 2.1 Console.WriteLine("{0,8},{1,16}", x, y) Next “x”を書き出すために, 8文字分確保する 例題:4次式の数表(改) 4次式 f x 1.5 x 0.8 x 6.2 x 0.5 x 2.1 4 について,f x 3 2 の値を,0から0.2きざみで5.0までの xに対して計算し,順に書き出すプログラムを作れ. xをMath.Sqrt(x)で置き換え Dim y As Single For x As Single = 0.0 To 5.0 Step 0.2 y = 1.5 * x ^ 4 - 0.8 * x ^ 3 _ + 6.2 * x ^ 2 + 0.5 * x + 2.1 Console.WriteLine("{0,8},{1,16}", x, y) Next 書き換えが煩雑!!関数として定義できないか? 関数の定義の書式 Sub Main() … y1 = プロシージャ名(引数リスト) … End Sub 仮引数,「値渡し」と 「参照渡し」がある Function プロシージャ名(引数リスト) [As 戻り値の型] 文ブロック Return 戻り値 または プロシージャ名 = 戻り値 End Function プロシージャとは • ある一連の処理コードに名前をつけて登録した 下請けプログラムを,プロシージャという. • 従来の言語では,「関数」あるいは 「サブルーチン」と呼ぶ処理に該当する. • Functionプロシージャが関数にあたり,呼び出した コードブロックに,必ず一つの値を返す. • Subプロシージャがサブルーチンにあたり, 呼び出したコードブロックに値を返さない. • プロシージャ間のデータの引き渡しは,「引数」で行う. 関数の定義の仕方の例(その1) (主プログラム) Sub Main() … y1=f(x) … End Sub 一種の副プログラムであるから, 主プログラムとは別に書く. 組み込み関数のように 呼び出せる 関数を単精度 実数型として宣言 Function f(x) Dim y As Single 戻り値の型の宣言 y = x ^ 2 + 2 * x 関数の定義 Return y End Function 主プログラムへ返す値 (副プログラム) (戻り値) 関数の定義の仕方の例(その2) Sub Main() 組み込み関数のように … 呼び出せる y1=f(x) … 主プログラムから End Sub (主プログラム) 値が渡される Function f(x) Dim y As Single 戻り値の型の宣言 If x < 0 Then y = 0 Else 関数の定義 ステップ y=1 関数 End If 主プログラムへ返す値 Return y (戻り値) End Function (副プログラム) 例題:4次関数の定義 4次式 f x 1.5 x 0.8 x 6.2 x 0.5 x 2.1 4 について,f x 3 2 の値を,0から0.2きざみで5.0までの xに対して計算し,順に書き出すプログラムを作れ. 考え方: • 実数xを引数とする実数型の関数 f(x)を定義する. • xを繰り返し変化させながら,y=f(√x)の値を 順に書き出す. 4次関数の定義:プログラム例 Sub Main() Dim y As Single For x As Single = 0.0 To 5.0 Step 0.2 y = f(Math.Sqrt(x)) Console.WriteLine("{0,8},{1,16}", x, y) Next End Sub Function f(x) Dim y As Single y = 1.5 * x ^ 4 - 0.8 * x ^ 3 _ + 6.2 * x ^ 2 + 0.5 * x + 2.1 Return y End Function 4次関数の定義:出力例 プログラミング演習 • 非負の整数 n に対する階乗 n ! を計算する 関数を定義し,これを用いることで級数 1 1 1 1 0! 1! 2! k 0 k ! 1 1 n 1! n! の値を計算せよ. 考え方: • 整数nを引数とする実数型の関数 factorial(n)を定義する. • 与級数は有限の値に収束する.有限項で切っても, 十分よい近似値が得られる. 級数の計算:プログラム例 Sub Main() Dim sum As Single = 0 有限で切る項を 十分大きく取る For i As Integer = 0 To 100 sum = sum + 1 / factorial(i) Next 関数の呼び出し Console.WriteLine("級数の値は{0}", sum) End Sub Function factorial(n) As Single Dim p As Single = 1 For i As Integer = 1 To n p = p * i Next Return p 関数として返す値 End Function 大きなnに対して 計算できるように, 実数型で定義 級数の計算:出力例 例題:方程式の根 方程式 は,区間[0,2]において ただ1つ根があることがわかっている.その根を 2分法によって求めるプログラムを作れ. •2分法 両端と中点の 符号を調べる 方程式の根:考え方 1. 区間 の中点 を計算する. 2. 区間 と において, • ならば解は左の区間 • ならば解は右の区間 3. 解がある方の区間において新たな中点を計算し, 判定を行う. となるまで繰り返し,そのときの 4. 解とする. を 方程式の根:プログラム例(主プログラム) Dim eps, x1, x2, xm As Single eps = 10 ^ -6 単精度実数型の x1 = 0 精度の限界 x2 = 2 端の値を入力 条件が真の間 While x2 - x1 > eps は繰り返す xm = (x1 + x2) / 2 中点の計算 If f(x1) * f(xm) > 0 Then x1 = xm 解が中点の左右 Else どちらにあるか判定 x2 = xm 端の点を再定義 End If End While 解の書き出し Console.WriteLine("解はx={0}", xm) 方程式の根:プログラム例(関数) Function f(x) Dim y As Single y = x ^ 3 - x - 1 Return y End Function 関数として返す値 方程式の根:出力例 課題:FizzBuzz問題(改) 正の整数を1から順に40まで書き出し, • 3の倍数と3のつく数字のときは”Fizz” • 5の倍数のときは”Buzz” • 両方を満たす場合は”Fizz&Buzz” と表示するプログラムを作れ. 提出期限:2016年6月13日(月) 適宜コメント行を挿入し,プログラムの説明をすること. メールにプログラムを電子ファイル(Module1.vb)添付して提出. プロジェクトのフォルダをzipなどで圧縮して提出してもよい. FizzBuzz問題(改):出力例
© Copyright 2024 ExpyDoc