情報基礎Ⅱ (第4回) 月曜4限 担当:北川 晃 演習:ユークリッドの互除法 ユークリッドの互除法を用いて,2つの正整数a,b (a>b)の最大公約数を求めるプログラムを作れ. ただし,While文によるループを用いること. あまり と の最大公約数は 例:1058と943の最大公約数 •1058÷943=1 あまり 115 (943と115の最大公約数) •943÷115=8 あまり 23 (115と23の最大公約数) •115÷23=5 あまり 0 と のとき, の最大公約数に等しい. •あまりが0になるまで この作業を繰り返す. •あまりが0になったときの 割る数が最大公約数 プログラム例:ユークリッドの互除法 Dim a, b, ℓ, m, n As Integer Console.Write("一つ目の整数を入力して下さい") a = Console.ReadLine() Console.Write("二つ目の整数を入力して下さい") b = Console.ReadLine() m = a n = b 余りが0かどうかを判定 ℓ = m - (m \ n) * n While ℓ <> 0 m = n n = ℓ ℓ = m - (m \ n) * n End While この二つの行を 逆にしてはならない 余りを計算し直して もう一度評価 Console.WriteLine("最大公約数は{0}", n) 判断と飛び越し2 IF-THEN-ELSE型 YES IF文 条件成立? 処理1 NO 処理2 合流 次の処理へ If文の基本的な表式 その2 If 条件式 Then [ 文ブロック1 ] [ Else [ 文ブロック2 ] ] End If • 条件式の値が真(True)の場合に文ブロック1が, 偽(False)の場合に文ブロック2が実行される. • 文ブロックは1文だけでも,あるいは 文が1つも無い場合も許される. • [ ]で囲まれた部分は省略可. 例題:大きい値と小さい値 n個のデータx1, x2, …, xnと定数aが与えられているとき, xi≧aであるものの個数と,xi<aであるものの個数を求めよ. •大きい値:6個 •小さい値:5個 大きい値と小さい値:アルゴリズム 1. 入力装置から区切りの値aを読み込む. 2. 初期値:大きい値の数ℓ=0, 小さい値の数s=0 3. 入力装置からxを一つ読み込む. 4. xとaを比較して, x≧aである場合はℓ→ℓ+1 x<aである場合はs→s+1 5. 次のxを読み込み,再び判定する. 6. 以上を繰り返し,読み込む値がなくなったら, ℓとsを書き出す. 大きい値と小さい値:出力例 プログラム例:大きい値と小さい値 Dim c, ℓ, s, n As Integer, a, x As Single Console.Write("区切りとなる値aを入力して下さい") a = Console.ReadLine() Console.Write("データの個数nを入れて下さい") n = Console.ReadLine() c = 0 ℓ = 0 s = 0 データの個数のカウンタ(初期値0) 大きな数字の個数のカウンタ(初期値0) 小さな数字の個数のカウンタ(初期値0) データの個数のカウンタを1増やす point1: c = c + 1 Console.Write("{0}個目のデータを入力して下さい", c) x = Console.ReadLine() プログラム例:大きい値と小さい値(続き) 入力したxの値がaよりも If x >= a Then ℓ = ℓ + 1 Else s = s + 1 End If 大きい場合はℓを1増やす 小さい場合はsを1増やす cがnに達していなければ,point1へ戻る If c <> n Then GoTo point1 Console.WriteLine("aより大きい値は{0}個," _ & "小さい値は{1}個", ℓ, s) If文の基本的な表式 その3 If 条件式1 Then [ 文ブロック1 ] [ ElseIf 条件式2 Then [ 文ブロック2 ] ] [ Else [ 文ブロック3 ] ] End If • 条件式1の値が真(True)の場合に文ブロック1が,偽(False)の 場合には条件式2が調べられ,式の値が真(True)の場合に 文ブロック2が,偽(False)の場合には文ブロック3が実行される. • ElseIf句はいくつでも追加できる. より複雑な条件式の書き方 • かつ のとき If a=1 And b=2 Then… • または のとき If a=1 Or b=2 Then… • のとき If x <= 0 Or (3 <= x And x < 5) Then… 括弧()などをうまく使って,条件式をまとめる. プログラミング演習 • 1~12の月(month)を入力をしたとき, 3~5月ならば「春」 6~8月ならば「夏」 9~11月ならば「秋」 12~2月ならば「冬」 と表示させるプログラムを作れ. 考え方:入力された”month”の値によって場合分けする. 出力例:季節の判定 プログラム例:季節の判定 Console.Title = "季節の判定プログラム" Dim month As Integer, season As String Console.WriteLine("何月ですか?1~12の整数を入力して下さい.") month = Console.ReadLine() 3≦月≦5の場合 If month >= 3 And month <= 5 Then season = "春" 6≦月≦8の場合 ElseIf month >= 6 And month <= 8 Then season = "夏" 9≦月≦11の場合 ElseIf month >= 9 And month <= 11 Then season = "秋" ElseIf month = 12 Or (month >= 1 And month <= 2) Then season = "冬" 月=12もしくは1≦月≦2 Else の場合 season = "入力エラー" End If それ以外の場合 Console.WriteLine("{0}月の季節は{1}です.", month, season) 様々な繰り返しの構文 • 同じ作業を,あらかじめ決まった回数だけ繰り返す 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)
© Copyright 2024 ExpyDoc