情報基礎Ⅱ/基礎工学Ⅲ (第3回) 月曜4限 担当:北川 晃 講義資料のスライド http://www.cc.kochi-u.ac.jp/~kitagawa/ より,適宜ダウンロードして参照してください. 判断と飛び越し1 WHILE型 IF文 条件成立? NO 繰り返して 実行する部分 GoTo文 次の処理へ YES If文の基本的な表式1 条件式: •条件式が満たされれば文1を実行 •満たされないときは文2を実行 [ ]で囲まれたElse句は省略 可. If 条件式 Then 文1 [Else 文2] 条件式(比較演算子)の書き方 • • • • • • < <= > >= = <> (より小さい) (以下) (より大きい) (以上) (等しい) (等しくない) If If If If If If a<100 Then …… a<=100 Then …… a>100 Then …… a>=100 Then …… a=100 Then …… a<>100 Then …… 1行のIf文の例文 Dim a, b, c, d, As Integer Dim flag As Boolean If a > b Then c = 100 Else c = -100 If a <= b Then c = 125 If flag Then c = d • 条件式は論理型の変数として扱われる. • 満たされた場合は「真」(True), 満たされない場合は「偽」(False)という. • 条件式に,論理型の変数を用いることも可能. 例題:ユークリッドの互除法 ユークリッドの互除法を用いて,2つの正整数a,b (a>b)の最大公約数を求めるプログラムを作れ. あまり と の最大公約数は 例:1058と943の最大公約数 •1058÷943=1 あまり 115 (943と115の最大公約数) •943÷115=8 あまり 23 (115と23の最大公約数) •115÷23=5 あまり 0 と のとき, の最大公約数に等しい. •あまりが0になるまで この作業を繰り返す. •あまりが0になったときの 割る数が最大公約数 ユークリッドの互除法のアルゴリズム 1. 2つの整数aとbを読み込む. 2. a→m,b→nを代入. 3. ℓ=(m÷nのあまり)を計算. 4. (n,ℓ)を新たな(m,n)として代入. 5. 手順3と4を,あまりℓが0になるまで繰り返す. 6. このときのnを最大公約数として書き出す. 大きい値と小さい値:出力例 プログラム例:ユークリッドの互除法 Dim a, b, ℓ, m, n As Integer ℓ=lと読み替えてください Console.Write("一つ目の整数を入力して下さい") a = Console.ReadLine() Console.Write("二つ目の整数を入力して下さい") b = Console.ReadLine() GoTo で m = a 飛ぶ先 n = b 余りを計算して,0なら ‘point2’へ飛べ,という命令 point1: ℓ = m - (m \ n) * n If ℓ = 0 Then GoTo point2 m = n この二つの行を n = ℓ GoTo point1 逆にしてはならない 条件成立? NO 繰り返して 実行する部分 point2: Console.WriteLine("最大公約数は{0}", n) 次の処理へ YES 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が11を越えるまで, 以下の命令を繰り返せ. 変数’sum’に’i’を加えた ものを新たな’sum’とする. Console.WriteLine(“合計は{0}”, sum) While文の条件式を誤れば,ループが 無限に繰り返されることにもなる. プログラム例:ユークリッドの互除法 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句はいくつでも追加できる.
© Copyright 2025 ExpyDoc