情報基礎II第三回目

Download Report

Transcript 情報基礎II第三回目

情報基礎II
(第3回)
月曜4限
担当:北川 晃
様々な繰り返しの構文
• 同じ作業を,あらかじめ決まった回数だけ繰り返す
 For……Next文
• ある条件式が満たされるまで,同じ作業を繰り返す
 While……End While文
条件式が真の場合は,ループを繰り返す(前判定)
 Do……Loop文
条件が真の場合,または真になるまで,
ループを繰り返す(前判定,後判定).
For……Next文の基本的な表式
For 制御変数 [As 型] = 初期値 To 終了値 [Step 増分]
文ブロック
Next [制御変数]
• 制御変数の値が初期値から終了値の間,ループを繰り返す.
• 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()
繰り返し
構造
変数iは,ループ内
でのみ用いる.
増分”1”は省略
For i As Integer = 1 To n
sum = sum + i
繰り返し構造の終了
Next i
(iは省略可)
Console.WriteLine("1+2+…+n={0}", sum)
For……Next文の入れ子構造
For j = 1 To n
For i = 1 To n
文ブロック
Next
Next
右のようなループの
組み合わせは許されない.
文頭でi,jの型を
宣言している場合
繰り返し構造の中に繰り返し
構造を作ることもできる.
“Next i”などと書けば,どの
変数のループかはっきりする
For j = 1 To n
For i = 1 To n
文ブロック
Next j
Next i
例題:フィボナッチ数列
フィボナッチ数列の最初の40項を求めて
出力するプログラムを作れ.
…
フィボナッチ数列:アルゴリズム
1. 求めたい項を’n_new’,ひとつ前の項を’n_last’,
二つ前の項を’n_old’とする.
2. 初期値としてn_old=0,n_last=1を代入し,
第一項と第二項をそれぞれ書き出す.
3. 第三項をn_new=n_old+n_lastにより計算し,書き出す.
4. 次の第四項を求めるために,
n_old=n_last,n_last=n_newの置き換えを行う.
5. この手順を,第40項が求まるまで繰り返す.
フィボナッチ数列:プログラム例
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)
第二項
i=1~num(=40)
まで繰り返し
For i = 3 To num
n_new = n_last + n_old
増分”Step 1”
Console.WriteLine("{0}", n_new)
n_old = n_last
は省略
n_last = n_new
Next
これらの文を
逆にしてはならない
フィボナッチ数列:出力例
例題:ピタゴラス数
l , m, n すべてを正数としたとき,次の関係
l 2  m2  n2
を満たすような l , m, n の組を見つけて表示せよ.
ただし,l  m  100 とする.
考え方
•
l  m を求め,Fix関数を用いて小数点を切り捨てる.
2
2
• この数を再び二乗し,l  m に一致するか調べる.
2
2
• l  m  100 より,l=1~99,m=l+1~100の数値に対して
For~Next文を用いて調べる.
ピタゴラス数:プログラム例
Dim l, m As Integer
Dim n_sq, n_int As Single
Console.Title = "ピタゴラス数"
ループの
入れ子構造
For l = 1 To 99
nの整数部分
For m = l + 1 To 100
の計算
n_sq = l ^ 2 + m ^ 2
n_int = Fix(Math.Sqrt(n_sq))
nが整数なら,
If n_sq = n_int ^ 2 Then
書き出す
Console.WriteLine( _
"{0,4}^2+{1,4}^2={2,4}^2", l, m, n_int)
End If
Next
“l”を書き出すために,
Next
4文字分確保する
ピタゴラス数:出力例
“l”を書き出すために,
4文字分確保されている
Whileループを用いた条件分岐
• While……End While文
ある条件によって繰り返しを続けるかどうかを判断するループ
While 条件式
文ブロック
End While
• 条件式が真(True)の間はループを繰り返す.
• 条件が最初から偽(False)の場合は,
ループを1回も実行しない.
While文の例題
Dim sum As Integer = 0, i As Integer
i = 1
While i <= 10
sum = sum + i
i = i + 1
End While
iが10以下の間は,
以下の命令を繰り返せ.
変数’sum’に’i’を加えた
ものを新たな’sum’とする.
Console.WriteLine(“合計は{0}”, sum)
While文の条件式を誤れば,ループが
無限に繰り返されることにもなる.
Do……Loop文の基本的な表式1
前判定ループ
Do While 条件式
文ブロック
• 条件が「真」の間は,
ループを繰り返す.
• 条件が最初から「偽」の場合は,
Loop
ループを1回も実行しない.
Do Until 条件式
• 条件が「真」になるまで,
文ブロック
ループを繰り返す.
Loop
• 条件が最初から「真」の場合は,
ループを1回も実行しない.
Do……Loop文の基本的な表式2
後判定ループ
• 条件が「真」の間は,
Do
文ブロック
ループを繰り返す.
Loop While 条件式
文ブロックは条件の「真」,「偽」に関わらず,最低一回は実行される.
• 条件が「真」になるまで,
Do
文ブロック
Loop Until 条件式
ループを繰り返す.