情報基礎Ⅱ (第5回) 月曜4限 担当:北川 晃
Microsoftアカウントの取得 https://www.microsoft.com/ja-jp/msaccount/へアクセスする.
Microsoftアカウントの取得
For……Next文の基本的な表式 For 制御変数 [As 型] = 初期値 To 終了値 [Step 増分] 文ブロック 制御変数の値が初期値から終了値の間,ループを繰り返す. 1回ループするたびに,制御変数の値は増分だけ増加する. 増分が負の場合は,減少する. 増分が1の場合のみ,”Step 1”は省略可. ループ内でのみ用いる制御変数を,Asで宣言できる. […]内は省略可.
For……Next文の例文 整数nを読み込んで,1+2+…+nの値を計算せよ. Console.Title = "1~nまでの和" Dim n As Integer, sum As Integer = 0 Console.Write("n=") n = Console.ReadLine() For i As Integer = 1 To n sum = sum + i Next i Console.WriteLine("1+2+…+n={0}", sum) 変数iは,ループ内 でのみ用いる. 増分”1”は省略 繰り返し 構造 繰り返し構造の終了 (iは省略可)
For……Next文の入れ子構造 文頭でi,jの型を For j = 1 To n 宣言している場合 For i = 1 To n 文ブロック Next 繰り返し構造の中に繰り返し 構造を作ることもできる. “Next i”などと書けば,どの 変数のループかはっきりする For j = 1 To n For i = 1 To n 文ブロック Next j Next i 右のようなループの 組み合わせは許されない.
例題:フィボナッチ数列 フィボナッチ数列の最初の40項を求めて 出力するプログラムを作れ. …
フィボナッチ数列:アルゴリズム 求めたい項を’n_new’,ひとつ前の項を’n_last’, 二つ前の項を’n_old’とする. 初期値としてn_old=0,n_last=1を代入し, 第一項と第二項をそれぞれ書き出す. 第三項をn_new=n_old+n_lastにより計算し,書き出す. 次の第四項を求めるために, n_old=n_last,n_last=n_newの置き換えを行う. この手順を,第40項が求まるまで繰り返す.
フィボナッチ数列:出力例
フィボナッチ数列:プログラム例 項の数 初項 第二項 i=1~num(=40)まで繰り返し 増分”Step 1” は省略 これらの文を Dim i, num, n_old, n_last, n_new As Integer num = 40 n_old = 0 Console.WriteLine("{0}", n_old) n_last = 1 Console.WriteLine("{0}", n_last) For i = 3 To num n_new = n_last + n_old Console.WriteLine("{0}", n_new) n_old = n_last n_last = n_new Next 項の数 初項 第二項 i=1~num(=40)まで繰り返し 増分”Step 1” は省略 これらの文を 逆にしてはならない
さまざまな組み込み関数 Math.Abs(x): xの絶対値 Math.Sign(-5)→-1 Math.Sign(0)→0 Math.Sign(x): xの符号 Int(x): xを超えない最大の整数 Fix(x): xの整数部分 Math.Sqrt(x): xの平方根 Math.Log(x): xの自然対数 Math.Exp(x): xの指数関数 Math.Sin(x): xの正弦(ラジアン単位) Math.Cos(x): xの余弦(ラジアン単位) Math.Tan(x): xの正接(ラジアン単位) Math.Sign(-5)→-1 Math.Sign(0)→0 Math.Sign(30)→1 Int(-4.3)→-5 Int(4.3)→4 Fix(-4.3)→-4 Fix(4.3)→4
例題:平方根の計算 a=1, 2, …, 50に対して,その平方根 を求め, 表を出力するプログラムを作れ. : Math.Sqrt(a) 補正値:
平方根の計算:アルゴリズム 整数 について,以下の手順を繰り返す. 初期値として, roota=1を代入する. 補正値 の計算を行う. 整数 について,以下の手順を繰り返す. 初期値として, roota=1を代入する. 補正値 の計算を行う. roota=roota+cにより補正を行う. 補正した値の相対値 を設定した値 と比較して 小さくなるまで補正を繰り返す.
平方根の計算:出力例
平方根の計算:プログラム例 許容誤差 単精度実数型の限界 Dim a As Integer, eps As Single = 0.000001 Dim roota, c As Single For a = 1 To 50 roota = 1 c = 1 While Math.Abs(c) / roota > eps c = (a / roota - roota) / 2 roota = roota + c End While Console.WriteLine("√{0}={1}", a, roota) Next 整数a=1~50に ついて繰り返す √aの初期値 補正値の計算 √aの値を補正 補正値が許容誤差より 小さくなるまで繰り返す
例題:4次式の数表 4次式 の値を,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次式 について, の値を,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 書き換えが煩雑!!関数として定義できないか?