200 likes | 370 Views
情報基礎 II ( 第 2 回). 月曜4限 担当 :北川 晃. 講義資料のスライド. http://www.cc.kochi-u.ac.jp/~kitagawa/ より ,適宜ダウンロードして参照してください.. 判断と飛び越し1. IF 文. WHILE 型. 条件成立?. YES. NO. 繰り返して 実行する部分. GoTo 文. 次の処理へ. If 文の基本的な表式1. 条件式: 条件式が 満たされれば文 1 を実行 満たされないとき は文 2 を実行. [ ] で囲まれた Else 句は省略可..
E N D
情報基礎II(第2回) 月曜4限 担当:北川 晃
講義資料のスライド http://www.cc.kochi-u.ac.jp/~kitagawa/ より,適宜ダウンロードして参照してください.
判断と飛び越し1 IF文 WHILE型 条件成立? YES NO 繰り返して 実行する部分 GoTo文 次の処理へ
If文の基本的な表式1 • 条件式: • 条件式が満たされれば文1を実行 • 満たされないときは文2を実行 [ ]で囲まれたElse句は省略可. If 条件式 Then 文1 [Else 文2] 条件式(比較演算子)の書き方 • <(より小さい)If a<100 Then …… • <=(以下)If a<=100 Then …… • >(より大きい)If a>100 Then …… • >=(以上)If a>=100 Then …… • =(等しい)If a=100 Then …… • <>(等しくない)If 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になったときの • 割る数が最大公約数
ユークリッドの互除法のアルゴリズム 2つの整数aとbを読み込む. a→m,b→nを代入. l=(m÷nのあまり)を計算. (n,l)を新たな(m,n)として代入. 手順3と4を,あまりlが0になるまで繰り返す. このときのnを最大公約数として書き出す.
プログラム例:ユークリッドの互除法 Dim a, b, l, m, n As Integer Console.Write("一つ目の整数を入力して下さい") a = Console.ReadLine() Console.Write("二つ目の整数を入力して下さい") b = Console.ReadLine() m = a n = b point1: l = m - (m \ n) * n If l = 0 Then GoTo point2 m = n n = l GoTo point1 point2:Console.WriteLine("最大公約数は{0}", n) 条件成立? YES GoToで 飛ぶ先 余りを計算して,0なら ‘point2’へ飛べ,という命令 NO 繰り返して 実行する部分 この二つの行を 逆にしてはならない 次の処理へ
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 Console.WriteLine(“合計は{0}”, sum) iが11を越えるまで, 以下の命令を繰り返せ. 変数’sum’に’i’を加えた ものを新たな’sum’とする. While文の条件式を誤れば,ループが 無限に繰り返されることにもなる.
プログラム例:ユークリッドの互除法 Dim a, b, l, m, n As Integer Console.Write("一つ目の整数を入力して下さい") a = Console.ReadLine() Console.Write("二つ目の整数を入力して下さい") b = Console.ReadLine() m = a n = b l = m - (m \ n) * n While l <> 0 m = n n = l l = m - (m \ n) * n End While Console.WriteLine("最大公約数は{0}", n) 余りが0かどうかを判定 この二つの行を 逆にしてはならない 余りを計算し直して もう一度評価
判断と飛び越し2 IF文 IF-THEN-ELSE型 条件成立? YES NO 処理1 処理2 合流 次の処理へ
If文の基本的な表式 その2 If条件式 Then [ 文ブロック1 ] [ Else [ 文ブロック2 ] ] End If • 条件式の値が真(True)の場合に文ブロック1が, • 偽(False)の場合に文ブロック2が実行される. • 文ブロックは1文だけでも,あるいは • 文が1つも無い場合も許される. • [ ]で囲まれた部分は省略可.
If文の基本的な表式 その3 If条件式1 Then [ 文ブロック1 ] [ ElseIf条件式2 Then [ 文ブロック2 ] ] [ Else [ 文ブロック3 ] ] End If • 条件式1の値が真(True)の場合に文ブロック1が,偽(False)の • 場合には条件式2が調べられ,式の値が真(True)の場合に • 文ブロック2が,偽(False)の場合には文ブロック3が実行される. • ElseIf句はいくつでも追加できる.
例題:大きい値と小さい値 n個のデータx1, x2, …, xnと定数aが与えられているとき, xi≧aであるものの個数と,xi<aであるものの個数を求めよ. • 大きい値:6個 • 小さい値:5個
大きい値と小さい値:アルゴリズム 入力装置から区切りの値aを読み込む. 初期値:大きい値の数l=0, 小さい値の数s=0 入力装置からxを一つ読み込む. xとaを比較して,x≧aである場合はl→l+1 x<aである場合はs→s+1 次のxを読み込み,再び判定する. 以上を繰り返し,読み込む値がなくなったら, lとsを書き出す.
プログラム例:大きい値と小さい値 Dim c, l, s, n As Integer, a, x As Single Console.Write("区切りとなる値aを入力して下さい") a = Console.ReadLine() Console.Write("データの個数nを入れて下さい") n = Console.ReadLine() c = 0 l = 0 s = 0 point1: c = c + 1 Console.Write("{0}個目のデータを入力して下さい", c) x = Console.ReadLine() データの個数のカウンタ(初期値0) 大きな数字の個数のカウンタ(初期値0) 小さな数字の個数のカウンタ(初期値0) データの個数のカウンタを1増やす
プログラム例:大きい値と小さい値(続き) • 入力したxの値がaよりも • 大きい場合はlを1増やす • 小さい場合はsを1増やす If x >= a Then l = l + 1 Else s = s + 1 End If If c <> n Then GoTo point1 Console.WriteLine("aより大きい値は{0}個," _ & "小さい値は{1}個", l, s) cがnに達していなければ,point1へ戻る