情報基礎実習I第三回目

Download Report

Transcript 情報基礎実習I第三回目

情報基礎実習I
(第3回)
木曜4・5限
担当:北川 晃
For……Next文の基本的な表式
For 制御変数 [As 型] = 初期値 To 終了値 [Step 増分]
文ブロック
Next [制御変数]
• 制御変数の値が初期値から終了値の間,ループを繰り返す.
• 1回ループするたびに,制御変数の値は増分だけ増加する.
• 増分が負の場合は,減少する.
• 増分が1の場合のみ,”Step 1”は省略可.
• ループ内でのみ用いる制御変数を,Asで宣言できる.
• […]内は省略可.
プログラミング演習
• 非負の整数 n を読み込んで,その階乗
n !  n   n  1 
 2 1
を計算するプログラムを作れ.ただし,
0!  1
とする.
考え方:
• 非負の整数nと整数pを導入する.
• i=1~nについて,繰り返しp=p*iを計算する.
• 最終的なpを書き出す.
階乗の計算:プログラム例
Dim n, p As Integer
Console.Title = "階乗の計算"
整数型では
-2147483648≦p≦214783647
の数しか扱えない
Console.Write("非負の整数nを入力して下さい:n=")
n = Console.ReadLine()
p = 1
pの初期値
nがゼロかどうかで場合分け
If n <> 0 Then
For i As Integer = 1 To n
p = p * i
Next
End If
Console.WriteLine("{0}!={1}", n, p)
階乗の計算:実行例
プログラミング演習
• 角度 0    90 について, 5 きざみに
正弦,余弦,正接の表を出力する
プログラムを作れ.
考え方:
• 変数’theta’について,For~Next文を用いて
繰り返し計算する.
• 組み込み関数’Math.Sin(x)’の変数はラジアン単位.
   rad  

180
  
三角関数の表:プログラム例
πの近似値
Dim theta_rad As Single, pi As Single = 3.1415926
スペースは適宜調整する
ラジアン単位の角度変数
Console.WriteLine("θ(°)
sinθ
For theta As Integer = 0 To 90 Step 5
theta_rad = pi / 180 * theta
Console.WriteLine( _
cosθ
tanθ")
整数’theta’を
0から5おきに
90まで繰り返す
度からラジアンへの変換
"{0,4}, {1,20}, {2,20}, {3,20}", _
スペースは
適宜調整
Next
theta, Math.Sin(theta_rad), _
Math.Cos(theta_rad), Math.Tan(theta_rad))
三角関数の表:実行例
プログラミング演習
n個のデータx1, x2, …, xnがある.データの個数とデータを
順次読み込んで,それらのデータの最大値と最小値を求めよ.
N=11個のデータ
最大値:9,最小値:1
最大と最小:考え方
1. 第(i-1)番目までのデータについて,
最大値xmaxと最小値xminが分かっているとする.
2. 次に読み込む第 i 番目のデータ xi について,
(i)xi>xmaxのとき,xiが新たな最大値となる.
xmax=xi
(ii)xi≦xmaxのとき,
(ii)-1. xi≧xminのとき,xmax,xminは変わらず.
(ii)-2. xi<xminのとき,xiが新たな最小値となる.
xmin=xi
3. これをすべてのデータについて繰り返す.
最大と最小:アルゴリズム
1. 最初のデータxを読み込む.
2. 最大値と最小値の初期値として,最初のデータを代入
xmax=x, xmin=x
3. 次のデータxを読み込み,xmaxとの大小を判定.
4. xmaxの方が小さければ,xとxminの大小を判定.
5. 必要があればxmaxもしくはxminを
読み込んだデータxで置き換え.
6. これを繰り返し,最後にxmaxとxminを書き出す.
プログラム例:最大値と最小値 その1
Dim xmax, xmin, x As Single, n As Integer
Console.Write("データの個数nを入力して下さい")
n = Console.ReadLine()
Console.Write("1個目のデータxを入力して下さい")
x = Console.ReadLine()
xmax = x
xmin = x
最大の値,最小の値の初期値として,
ともに1個目のデータxを代入する.
プログラム例:最大値と最小値 その2
For i As Integer = 2 To n
Console.Write("{0}個目のデータxを入力して下さい", i)
x = Console.ReadLine()
xが最大値より大きければ,
If x > xmax Then
最大値を置き換える.
xmax = x
xは最大値より小さい.
ElseIf x >= xmin Then
このとき,xの値が最小値より
大きい場合は,何もしない.
Else
xmin = x
それ以外の場合は
End If
最小値を置き換える.
Next
Console.WriteLine("最大の値は{0}", xmax)
Console.WriteLine("最小の値は{0}", xmin)
最大値と最小値:実行例
例題:平方根の計算
a=1, 2, …, 50に対して,その平方根
を求め,
表を出力するプログラムを作れ.
: Math.Sqrt(a)
aの平方根の近似値:
補正値:
平方根の計算:アルゴリズム
1. 整数
2. 初期値として,
3. 補正値
について,以下の手順を繰り返す.
roota=1を代入する.
の計算を行う.
4. roota=roota+cにより補正を行う.
5. 補正した値の相対値
を設定した値
と比較して
小さくなるまで補正を繰り返す.
ピタゴラス数:プログラム例
許容誤差
単精度実数型の限界
Dim a As Integer, eps As Single = 0.000001
Dim roota, c As Single 整数a=1~50に
ついて繰り返す
For a = 1 To 50
√aの初期値
roota = 1
補正値の計算
Do
c = (a / roota - roota) / 2
√aの値を補正
roota = roota + c
Loop Until Math.Abs(c) / roota < eps
Console.WriteLine("√{0}={1}", a, roota)
Next
補正値が許容誤差より
小さくなるまで繰り返す
(後判定ループ)
平方根の計算:出力例
課題:FizzBuzz問題(改)
正の整数を1から順に40まで書き出し,
• 3の倍数と3のつく数字のときは”Fizz”
• 5の倍数のときは”Buzz”
• 両方を満たす場合は”Fizz&Buzz”
と表示するプログラムを作れ.
提出期限:2014年5月22日(木)
メールにプログラムを電子ファイル(Module1.vb)添付して提出.
プロジェクトのフォルダをzipなどで圧縮して提出してもよい.
FizzBuzz問題(改):出力例