210 likes | 381 Views
情報基礎実習 I ( 第 9 回). 木 曜4・5限 担当 :北川 晃. プログラミング演習. の否定を で表す.次の四つの演算に対して 真理値表を作成し ,同じ動作をするものを見つけよ.. ① ② ③ ④. プログラミングの指針 最初に n=1 ~ 4 の値を代入し, それぞれ①~④の評価を行わせる. Select Case 文を使うとよい.. Select Case 例文. Select Case x Case Is < 0 Text=“ 負の値です ” Case 0 Text=“0 の値です ”
E N D
情報基礎実習I(第9回) 木曜4・5限 担当:北川 晃
プログラミング演習 の否定を で表す.次の四つの演算に対して 真理値表を作成し,同じ動作をするものを見つけよ. ① ② ③ ④ • プログラミングの指針 • 最初にn=1~4の値を代入し, • それぞれ①~④の評価を行わせる. • Select Case文を使うとよい.
Select Case 例文 Select Case x Case Is < 0 Text=“負の値です” Case 0 Text=“0の値です” Case 1 To 99 Text=“1~99の値です” Case Else Text=“100以上の値です” End Select xの値がどのケースに 当てはまるかを選ぶ End Selectで締めくくる
ド・モルガンの法則:プログラム例 Dim m As Integer Sub Main() Dim v() As Boolean = {True, False} Console.Write("どの式を評価しますか?(1-4)") m = Console.ReadLine() Console.WriteLine(" a b result") Console.WriteLine("--------------------") For i As Integer = 0 To 1 For j As Integer = 0 To 1 Console.WriteLine("{0,6} {1,6} {2,6}", _ v(i), v(j), Ev(v(i), v(j))) Next Next End Sub
ド・モルガンの法則:プログラム例(つづき)ド・モルガンの法則:プログラム例(つづき) Function Ev(a, b) Dim Ev0 As Boolean Select Case m Case 1 Ev0 = Not (a And b) Case 2 Ev0 = Not (a Or b) Case 3 Ev0 = (Not a) And (Not b) Case 4 Ev0 = (Not a) Or (Not b) End Select Return Ev0 End Function それぞれの式を評価する
プログラミング演習 図に示したように,スイッチA, B, C, Dが配置してある 回路がある.各スイッチの状態(ONかOFF)に応じて, 電灯(L)が点灯するかどうかを示す表を作れ. A B D C L
ランプの回路:考え方 A それぞれのスイッチの’ON’をTrueに,’OFF’をFalseに対応させる. B AとBがともにONになって,電気が通る A B AかB,どちらかがONになれば,電気が通る A, B, C, D, Lについての真理値表を作る
ランプの回路:プログラム例 Sub Main() Dim v() As Boolean = {True, False} Dim i_A, i_B, i_C, i_D Console.WriteLine(" A B C D L") Console.WriteLine("----------------------------------") For i_A = 0 To 1 For i_B = 0 To 1 For i_C = 0 To 1 For i_D = 0 To 1 Console.WriteLine("{0,6} {1,6} {2,6} {3,6} {4,6}", _ v(i_A), v(i_B), v(i_C), v(i_D), _ lamp(v(i_A), v(i_B), v(i_C), v(i_D))) Next Next Next Next End Sub 電気回路に相当する評価関数
ランプの回路:プログラム例 Function lamp(a, b, c, d) Dim L As Boolean L= a Or ((b Or c) And d) Return L End Function 電気回路に相当する評価関数
プログラミング演習 4人の狩人A, B, C, Dが7日間,野営地にいた. Aが狩りに出た日はBは出なかった. Bが狩りに出た日にはDも出たが,Cは出なかった. Dが狩りに出た日には,AまたはBが出た. 狩りに出た狩人の組み合わせが同じ日は一日もなかった. Dは何日狩りに出て,それは誰と一緒だったか. 以上の問題を,論理型変数を用いたプログラムを用いて解け. ポール・J・ナーイン著, 「0と1の話 ブール代数とシャノン理論」, 青土社(2013年)
狩人の問題:考え方 • A, B, C, Dそれぞれが狩りに出た場合を’True’, • 狩りに出なかった場合を’False’とする. • 4人の狩人が狩りに出る組み合わせを表に書き出す. • ただし,条件に当てはまらない場合は書き出さない. A = Trueなら,B = Trueでない B = Trueなら,D = True ただしC = Trueでない D = Trueなら,A = TrueもしくはB = True A, B, C, D = {True, False}の24=16通りについて, 上記条件を満たさない場合を除いて,7通りが残ればよい 条件を二つに分けるとよい
狩人の問題:プログラム例 Dim v() As Boolean = {True, False} Console.WriteLine(" a b c d") Console.WriteLine("---------------------------") For i As Integer = 0 To 1 For j As Integer = 0 To 1 For k As Integer = 0 To 1 For m As Integer = 0 To 1 If v(i) And v(j) Then GoTo point1 If v(j) = True And v(m) = False _ Then GoTo point1 If (v(j) And v(m)) And v(k) _ Then GoTopoint1 条件に当てはまらない場合はすべて,point1へ飛ぶ
狩人の問題:プログラム例(つづき) If (v(j) And v(m)) And v(k) _ Then GoTo point1 If (v(m) = True) _ And (v(i) = False And v(j) = False) _ Then GoTo point1 Console.WriteLine( _ "{0,6} {1,6} {2,6} {3,6}", _ v(i), v(j), v(k), v(m)) point1: Next Next Next Next 条件を満たしている場合は, 真理値表を書き出す
狩人の問題:出力例 7通り Dが狩りに出たのは3日, A, Cとともに Aとともに Bとともに
例題:エラトステネスのふるい までの素数を求めて出力するプログラムを作れ. アルゴリズム:エラトステネスのふるい • 2の倍数(2自身を除く)に全部印をつける. • 3の倍数(3自身を除く)に全部印をつける. • 5の倍数(5自身を除く)に全部印をつける. • … • まで全部の倍数に印をつけたとき, • 印がつかないで残っている数は, • どの数の倍数でもないから素数である.
エラトステネスのふるい:アルゴリズム • 上限となる整数nを読み込む. • i=3以上の奇数について調べる. • c(i)という配列(印をつけるのに用いる)のすべての • 成分に,「真」を代入する. • エラトステネスのふるいの方法で, • 各整数の倍数に印をつける. • 印なしを「真」,印ありを「偽」として区別する. • ふるいをかける整数の最初の値を, • 配列成分p(m)に代入する. • これをnまで繰り返し,最後に配列p(m)を書き出す.
エラトステネスのふるい:プログラム例 Console.Title = "nまでの素数の探索" Dim c(10000) As Boolean Dim i, j, m, n, p(10000) As Integer, l As Integer = 1 Console.WriteLine("上限となる値を入力して下さい") Console.Write("n=") n = Console.ReadLine() 'c(i)は素数かどうかのチェック(=Trueは素数,=Falseは素数でない) 'mは素数列の項番号 '素数列の初項 m = 1 p(m) = 2 '3以上の奇数について,すべてに一旦,素数のチェックを入れる(True) For i = 3 To n Step 2 c(i) = True Next
エラトステネスのふるい:プログラム例(つづき)エラトステネスのふるい:プログラム例(つづき) For i = 3 To n Step 2 ‘iのチェック(c(i))が入っていない(True)場合 If c(i) = True Then ‘素数の項数mを1増やし,iを素数としてp(m)に書き出す. m = m + 1 p(m) = i 'iとそれ以降の倍数のチェック(c(i))を入れる(False) For j = i To n Step i c(j) = False Next End If Next For i = 1 To m If (i = m) Or (i Mod 10 = 0) Then Console.WriteLine("{0,5}", p(i)) Else Console.Write("{0,5}", p(i)) End If Next