SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
アルゴリズムとデータ構造

  2011.12.2(WEB用)
今日の内容

• 3.2   論理式と論理演算
• 3.3   caseを使った多重分岐
• 3.4   サンプルプログラム
比較演算子一覧
Rubyでの論理式   数学的な意味        意味

 a == b      a=b     a と b は等しい
 a != b      a≠b     a と b は異なる
  a>b        a>b     a は b より大きい
 a >= b      a≥b     a は b 以上
  a<b        a<b     a は b より小さい
 a <= b      a≤b     a は b 以下
文字列の大小比較
 1   # compstr.rb
 2   str1 = ARGV[0]
 3   str2 = ARGV[1]
 4   if str1 == str2 then
 5      puts “#{str1} は #{str2} と同じです。”
 6   elsif str1 < str2 then
 7      puts “#{str1} は #{str2} より前です。”
 8   else
 9      puts “#{str1} は #{str2} より後です。”
10   end

      比較演算は数値だけでなく文字列に対しても行えます。
        上のスクリプトを作成して実行してみましょう。
文字列の大小比較
 1   # compstr.rb
 2   str1 = ARGV[0]             # str1 = “nyaa”
 3   str2 = ARGV[1]             # str2 = “myau”
 4   if str1 == str2 then
 5      puts “#{str1} は #{str2} と同じです。”
 6   elsif str1 < str2 then
 7      puts “#{str1} は #{str2} より前です。”
 8   else
 9      puts “#{str1} は #{str2} より後です。”
10   end

            ここでは例としてコマンドライン上で
        引数1に “nyaa”、引数2に”myau” と与えたとします。
文字列の大小比較
 1   # compstr.rb
 2   str1 = ARGV[0]             # str1 = “nyaa”
 3   str2 = ARGV[1] false       # str2 = “myau”
 4   if str1 == str2 then
 5      puts “#{str1} は #{str2} と同じです。”
                        false
 6   elsif str1 < str2 then
 7      puts “#{str1} は #{str2} より前です。”
 8   else
 9      puts “#{str1} は #{str2} より後です。”
10   end

              “nyaa” と “myau” はアルファベット順では
              “myau” が先に来て “nyaa” が後に来る。
文字列の大小比較
 1   # compstr.rb
 2   str1 = ARGV[0]             # str1 = “nyaa”
 3   str2 = ARGV[1] false       # str2 = “myau”
 4   if str1 == str2 then
 5      puts “#{str1} は #{str2} と同じです。”
                        false
 6   elsif str1 < str2 then
 7      puts “#{str1} は #{str2} より前です。”
            true
 8   else
 9      puts “#{str1} は #{str2} より後です。”
10   end

     最初の2つの論理式がfalse値を返すのでelse文に入る。
     このように文字列同士の比較では辞書順で先にくるか
      後にくるかを判断する(文字数ではないので注意)
論理演算と論理演算子
    算術演算において演算子があるように
  論理演算では論理値に対する演算子がある。

       オペランド1            オペレーター      オペランド2

算術演算   数値、文字列            + - * / %   数値、文字列



論理演算       論理値                           論理値
                          && || !
       (true or false)               (true or false)
論理演算(Boolean operation)
演算子         意味                 演算結果

                true && true => true
          AND
&&              true && false => false
       (かつ、論理積) false && false => false
                true || true => true
           OR
||              true || false => true
      (または、論理和) false || false => false

           NOT       !true => false
 !        (否定)       !false => true
論理演算(Boolean operation)
演算子         意味                  演算結果

                true && true => true
          AND
&&              true && false => false
       (かつ、論理積) false && false => false
                true || true => true
           OR
||              true || false => true
      (または、論理和) false || false => false

           NOT        !true => false
 !        (否定)        !false => true
       1(true) と 0(false) のかけ算と考える
       1×1=1 1×0=0           0×0=0
論理演算(Boolean operation)
演算子         意味                   演算結果

                true && true => true
          AND
&&              true && false => false
       (かつ、論理積) false && false => false
                true || true => true
           OR
||              true || false => true
      (または、論理和) false || false => false

           NOT         !true => false
 !        (否定)         !false => true
       1(true) と 0(false) のたし算と考える
       1+1=1 1+0=1            0+0=0
論理演算(Boolean operation)
演算子         意味                 演算結果

                true && true => true
          AND
&&              true && false => false
       (かつ、論理積) false && false => false
                true || true => true
           OR
||              true || false => true
      (または、論理和) false || false => false

           NOT       !true => false
 !        (否定)       !false => true
richyoung.rb
1   # richyoung.rb
2   # 2個の引数(年齢, 所持金)を与えて判定をおこないます。
3   age = ARGV[0].to_i
4   money = ARGV[1].to_i
5   if age <= 35 && money > 1000 then
6      puts “若い金持ちやで。”
7   else
8      puts “びみょーやな。”
9   end
richyoung2.rb
1   # richyoung2.rb
2   # 2個の引数(年齢, 所持金)を与えて判定をおこないます。
3   age = ARGV[0].to_i
4   money = ARGV[1].to_i
5   if age <= 35 || money > 1000 then
6      puts “若いか金持ちかやな。”
7   else
8      puts “びんぼーなおっさんやで。”
9   end
case を使った多重分岐
判定条件が多数ある場合、if-elseif-else 構文の代りに
case文や範囲リテラル使うと、可読性が高まる
age = ARGV[0].to_i
if age == 0 || age == 1
   ・・・
elsif age >= 2 && age <= 11
   ・・・
elsif age >= 12 && age <= 17
   ・・・
elsif age >= 18 && age <= 29
   ・・・
elsif age >= 30 && age <= 60
   ・・・
else
   ・・・
end
case を使った多重分岐
判定条件が多数ある場合、if-elseif-else 構文の代りに
case文や範囲リテラル使うと、可読性が高まる
age = ARGV[0].to_i             case age
if age == 0 || age == 1        when 0, 1
   ・・・                           ・・・
elsif age >= 2 && age <= 11    when 2 .. 11
   ・・・                           ・・・
elsif age >= 12 && age <= 17   when 12 .. 17
   ・・・                           ・・・
elsif age >= 18 && age <= 29   when 18 .. 29
   ・・・                           ・・・
elsif age >= 30 && age <= 60   when 30 .. 60
   ・・・                           ・・・
else                           else
   ・・・                           ・・・
end                            end
case1.rb
1    # case1.rb
2    age = ARGV[0].to_i
3    case age
4    when 0, 1
5      guest = “赤ちゃん”
6    when 2 .. 11
7      guest = “お子さま”
8    when 12 .. 17
9      guest = “おませさん”
10   when 18 .. 29
11     guest = “お若いかた”
12   when 30 .. 60
13     guest = “おとなの方”
14   else
15     guest = “お年寄り”
16   end
17   puts “#{guest}さま、いらっしゃいませ。”
倍数判定
1   # olympicyear.rb
2   year = ARGV[0].to_i
3   if year % 4 == 0 then
4      puts “#{year} 年には夏のオリンピックが開かれます。”
5   end


1   # toshionna.rb
2   age= ARGV[0].to_i
3   if age % 12 != 0 then
4      puts “あなたは年女ではありません。”
5   end
倍数判定
1    # olympicyear.rb
2    year = ARGV[0].to_i   # 4の倍数なら剰余が0になるので
3    if year % 4 == 0 then # 評価結果は true となる。
4       puts “#{year} 年には夏のオリンピックが開かれます。”
5    end
    西暦 ÷ 4 の余り

1    # toshionna.rb
2    age= ARGV[0].to_i     # 同様に年齢が12の倍数かどうか
3    if age % 12 != 0 then # を評価(倍数で無い場合 true)
4       puts “あなたは年女ではありません。”
5    end
    年齢 ÷ 12 の余り
偶数・奇数判定
1   # oddeven.rb
2   n = ARGV[0].to_i
3   if n % 2 == 0 then
4      puts “#{n} は偶数です。”
5   else
6      puts “#{n} は奇数です。”
7   end
偶数・奇数判定
1   # oddeven.rb
2   n = ARGV[0].to_i
3   if n % 2 == 0 then
4      puts “#{n} は偶数です。”
5   else
6      puts “#{n} は奇数です。”
7   end


    偶数なら2の倍数なので、n % 2 の結果が0の場合と
    それ以外(1の場合)で、偶数・奇数の判定が出来る
条件判断と集合

条件分岐を考える際、集合論に基づいて考えてみる
ことで、場合分けについてより理解が深まります。
条件判断と集合

年齢を x (0から120)として、成人かどうか判断する
場合について、以下のように整理します。

            【命題 A】 x は20以上である。


 U  {x | 0,1,2,...,120}   (全体集合)
 A  {20,21,22,...,120}     真
 A  {0,1,2,...,19}         偽(補集合)
条件判断と集合

           x U
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
                                  if x >= 20
              A                      # 成人向けの処理
   20 21 22 23 24 25 ・・・          else
                              A      # それ以外の処理
         ・・・117 118 119 120       end




              【命題 A】 x は20以上である。
複合した論理式

条件分岐に複数の論理式を用いる場合(つまり論理
演算を行う場合)も、集合に基づいて考えてみましょう。


  【命題 A】 生まれ年が2000年以前である。

  【命題 B】 トラ年の生まれである。
複合した論理式

 まずは命題Aに対する論理式を与える。



【命題 A】 生まれ年が2000年以前である。

【命題 B】 トラ年の生まれである。


if x <= 2000
複合した論理式

   次は命題Bに対する論理式を与える。
トラ年の生まれ年は12で割った余りが6になる。


 【命題 A】 生まれ年が2000年以前である。

 【命題 B】 トラ年の生まれである。


 if x % 12 == 6
ベン図
     U



A         B
ベン図
             U



        A    IV    B



            A B
生まれが2000年以前でかつトラ年生まれの場合
ベン図
                 U

            II
        A            B



             A B
生まれが2000年以前かつトラ年生まれでない場合
ベン図
              U

                  III
         A          B



             A B
生まれが2000年以前でないかつトラ年生まれの場合
ベン図
                U
       I

           A          B



               A B
生まれが2000年以前でないかつトラ年生まれでない場合
ド・モルガンの定理

A   B   A  B  ( A  B)


A   B
        A  B  ( A  B)

ド・モルガンの定理は上記の関係を示したもの
プログラム文へ置き換え
if x <= 2000 && x % 12 == 6 then
  # (IV)                              A   B



elsif x <= 2000 && x % 12 != 6 then
  # (II)                              A   B


elsif x > 2000 && x % 12 == 6 then
  # (III)                             A   B


else
  # (I)                               A   B

end
第3章まとめ
• 3.1   if-elsif-else 構文

• 3.2   論理式と論理演算(子)

• 3.3   case文を使った多重分岐

• 3.4   条件判断と集合

Weitere ähnliche Inhalte

Ähnlich wie 2011年12月2日

2011年12月16日
2011年12月16日2011年12月16日
2011年12月16日nukaemon
 
2011年11月18日
2011年11月18日2011年11月18日
2011年11月18日nukaemon
 
さくっと線形代数
さくっと線形代数さくっと線形代数
さくっと線形代数Kota Mori
 
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会Tetsuya Yoshida
 
関西Scala勉強会 パターンマッチング
関西Scala勉強会 パターンマッチング関西Scala勉強会 パターンマッチング
関西Scala勉強会 パターンマッチングNaoki Wada
 
Rで学ぶ逆変換(逆関数)法
Rで学ぶ逆変換(逆関数)法Rで学ぶ逆変換(逆関数)法
Rで学ぶ逆変換(逆関数)法Nagi Teramo
 
第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)Yoshitake Takebayashi
 
Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎Kenji Otsuka
 
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Yukiko Kato
 
10_C言語入門 - 条件分岐について(論理演算子と条件演算子)
10_C言語入門 - 条件分岐について(論理演算子と条件演算子)10_C言語入門 - 条件分岐について(論理演算子と条件演算子)
10_C言語入門 - 条件分岐について(論理演算子と条件演算子)bc_rikko
 
PHP基本的関数QUIZ
PHP基本的関数QUIZPHP基本的関数QUIZ
PHP基本的関数QUIZWataru Terada
 
『上級演習』確率
『上級演習』確率『上級演習』確率
『上級演習』確率JUKEN7
 
スプラトゥーン2 × 数学(訂正版)
スプラトゥーン2 × 数学(訂正版)スプラトゥーン2 × 数学(訂正版)
スプラトゥーン2 × 数学(訂正版)Takunology
 

Ähnlich wie 2011年12月2日 (14)

2011年12月16日
2011年12月16日2011年12月16日
2011年12月16日
 
2011年11月18日
2011年11月18日2011年11月18日
2011年11月18日
 
さくっと線形代数
さくっと線形代数さくっと線形代数
さくっと線形代数
 
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
 
関西Scala勉強会 パターンマッチング
関西Scala勉強会 パターンマッチング関西Scala勉強会 パターンマッチング
関西Scala勉強会 パターンマッチング
 
Rで学ぶ逆変換(逆関数)法
Rで学ぶ逆変換(逆関数)法Rで学ぶ逆変換(逆関数)法
Rで学ぶ逆変換(逆関数)法
 
第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)
 
Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎
 
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】
 
10_C言語入門 - 条件分岐について(論理演算子と条件演算子)
10_C言語入門 - 条件分岐について(論理演算子と条件演算子)10_C言語入門 - 条件分岐について(論理演算子と条件演算子)
10_C言語入門 - 条件分岐について(論理演算子と条件演算子)
 
PHP基本的関数QUIZ
PHP基本的関数QUIZPHP基本的関数QUIZ
PHP基本的関数QUIZ
 
『上級演習』確率
『上級演習』確率『上級演習』確率
『上級演習』確率
 
[xDNCL] 配布資料
[xDNCL] 配布資料[xDNCL] 配布資料
[xDNCL] 配布資料
 
スプラトゥーン2 × 数学(訂正版)
スプラトゥーン2 × 数学(訂正版)スプラトゥーン2 × 数学(訂正版)
スプラトゥーン2 × 数学(訂正版)
 

Mehr von nukaemon

2012年1月13日
2012年1月13日2012年1月13日
2012年1月13日nukaemon
 
2011年12月9日
2011年12月9日2011年12月9日
2011年12月9日nukaemon
 
2011年10月28日
2011年10月28日2011年10月28日
2011年10月28日nukaemon
 
2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日nukaemon
 
2011年10月14日
2011年10月14日2011年10月14日
2011年10月14日nukaemon
 
2011年10月7日
2011年10月7日2011年10月7日
2011年10月7日nukaemon
 

Mehr von nukaemon (6)

2012年1月13日
2012年1月13日2012年1月13日
2012年1月13日
 
2011年12月9日
2011年12月9日2011年12月9日
2011年12月9日
 
2011年10月28日
2011年10月28日2011年10月28日
2011年10月28日
 
2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日
 
2011年10月14日
2011年10月14日2011年10月14日
2011年10月14日
 
2011年10月7日
2011年10月7日2011年10月7日
2011年10月7日
 

2011年12月2日

  • 2. 今日の内容 • 3.2 論理式と論理演算 • 3.3 caseを使った多重分岐 • 3.4 サンプルプログラム
  • 3. 比較演算子一覧 Rubyでの論理式 数学的な意味 意味 a == b a=b a と b は等しい a != b a≠b a と b は異なる a>b a>b a は b より大きい a >= b a≥b a は b 以上 a<b a<b a は b より小さい a <= b a≤b a は b 以下
  • 4. 文字列の大小比較 1 # compstr.rb 2 str1 = ARGV[0] 3 str2 = ARGV[1] 4 if str1 == str2 then 5 puts “#{str1} は #{str2} と同じです。” 6 elsif str1 < str2 then 7 puts “#{str1} は #{str2} より前です。” 8 else 9 puts “#{str1} は #{str2} より後です。” 10 end 比較演算は数値だけでなく文字列に対しても行えます。 上のスクリプトを作成して実行してみましょう。
  • 5. 文字列の大小比較 1 # compstr.rb 2 str1 = ARGV[0] # str1 = “nyaa” 3 str2 = ARGV[1] # str2 = “myau” 4 if str1 == str2 then 5 puts “#{str1} は #{str2} と同じです。” 6 elsif str1 < str2 then 7 puts “#{str1} は #{str2} より前です。” 8 else 9 puts “#{str1} は #{str2} より後です。” 10 end ここでは例としてコマンドライン上で 引数1に “nyaa”、引数2に”myau” と与えたとします。
  • 6. 文字列の大小比較 1 # compstr.rb 2 str1 = ARGV[0] # str1 = “nyaa” 3 str2 = ARGV[1] false # str2 = “myau” 4 if str1 == str2 then 5 puts “#{str1} は #{str2} と同じです。” false 6 elsif str1 < str2 then 7 puts “#{str1} は #{str2} より前です。” 8 else 9 puts “#{str1} は #{str2} より後です。” 10 end “nyaa” と “myau” はアルファベット順では “myau” が先に来て “nyaa” が後に来る。
  • 7. 文字列の大小比較 1 # compstr.rb 2 str1 = ARGV[0] # str1 = “nyaa” 3 str2 = ARGV[1] false # str2 = “myau” 4 if str1 == str2 then 5 puts “#{str1} は #{str2} と同じです。” false 6 elsif str1 < str2 then 7 puts “#{str1} は #{str2} より前です。” true 8 else 9 puts “#{str1} は #{str2} より後です。” 10 end 最初の2つの論理式がfalse値を返すのでelse文に入る。 このように文字列同士の比較では辞書順で先にくるか 後にくるかを判断する(文字数ではないので注意)
  • 8. 論理演算と論理演算子 算術演算において演算子があるように 論理演算では論理値に対する演算子がある。 オペランド1 オペレーター オペランド2 算術演算 数値、文字列 + - * / % 数値、文字列 論理演算 論理値 論理値 && || ! (true or false) (true or false)
  • 9. 論理演算(Boolean operation) 演算子 意味 演算結果 true && true => true AND && true && false => false (かつ、論理積) false && false => false true || true => true OR || true || false => true (または、論理和) false || false => false NOT !true => false ! (否定) !false => true
  • 10. 論理演算(Boolean operation) 演算子 意味 演算結果 true && true => true AND && true && false => false (かつ、論理積) false && false => false true || true => true OR || true || false => true (または、論理和) false || false => false NOT !true => false ! (否定) !false => true 1(true) と 0(false) のかけ算と考える 1×1=1 1×0=0 0×0=0
  • 11. 論理演算(Boolean operation) 演算子 意味 演算結果 true && true => true AND && true && false => false (かつ、論理積) false && false => false true || true => true OR || true || false => true (または、論理和) false || false => false NOT !true => false ! (否定) !false => true 1(true) と 0(false) のたし算と考える 1+1=1 1+0=1 0+0=0
  • 12. 論理演算(Boolean operation) 演算子 意味 演算結果 true && true => true AND && true && false => false (かつ、論理積) false && false => false true || true => true OR || true || false => true (または、論理和) false || false => false NOT !true => false ! (否定) !false => true
  • 13. richyoung.rb 1 # richyoung.rb 2 # 2個の引数(年齢, 所持金)を与えて判定をおこないます。 3 age = ARGV[0].to_i 4 money = ARGV[1].to_i 5 if age <= 35 && money > 1000 then 6 puts “若い金持ちやで。” 7 else 8 puts “びみょーやな。” 9 end
  • 14. richyoung2.rb 1 # richyoung2.rb 2 # 2個の引数(年齢, 所持金)を与えて判定をおこないます。 3 age = ARGV[0].to_i 4 money = ARGV[1].to_i 5 if age <= 35 || money > 1000 then 6 puts “若いか金持ちかやな。” 7 else 8 puts “びんぼーなおっさんやで。” 9 end
  • 15. case を使った多重分岐 判定条件が多数ある場合、if-elseif-else 構文の代りに case文や範囲リテラル使うと、可読性が高まる age = ARGV[0].to_i if age == 0 || age == 1 ・・・ elsif age >= 2 && age <= 11 ・・・ elsif age >= 12 && age <= 17 ・・・ elsif age >= 18 && age <= 29 ・・・ elsif age >= 30 && age <= 60 ・・・ else ・・・ end
  • 16. case を使った多重分岐 判定条件が多数ある場合、if-elseif-else 構文の代りに case文や範囲リテラル使うと、可読性が高まる age = ARGV[0].to_i case age if age == 0 || age == 1 when 0, 1 ・・・ ・・・ elsif age >= 2 && age <= 11 when 2 .. 11 ・・・ ・・・ elsif age >= 12 && age <= 17 when 12 .. 17 ・・・ ・・・ elsif age >= 18 && age <= 29 when 18 .. 29 ・・・ ・・・ elsif age >= 30 && age <= 60 when 30 .. 60 ・・・ ・・・ else else ・・・ ・・・ end end
  • 17. case1.rb 1 # case1.rb 2 age = ARGV[0].to_i 3 case age 4 when 0, 1 5 guest = “赤ちゃん” 6 when 2 .. 11 7 guest = “お子さま” 8 when 12 .. 17 9 guest = “おませさん” 10 when 18 .. 29 11 guest = “お若いかた” 12 when 30 .. 60 13 guest = “おとなの方” 14 else 15 guest = “お年寄り” 16 end 17 puts “#{guest}さま、いらっしゃいませ。”
  • 18. 倍数判定 1 # olympicyear.rb 2 year = ARGV[0].to_i 3 if year % 4 == 0 then 4 puts “#{year} 年には夏のオリンピックが開かれます。” 5 end 1 # toshionna.rb 2 age= ARGV[0].to_i 3 if age % 12 != 0 then 4 puts “あなたは年女ではありません。” 5 end
  • 19. 倍数判定 1 # olympicyear.rb 2 year = ARGV[0].to_i # 4の倍数なら剰余が0になるので 3 if year % 4 == 0 then # 評価結果は true となる。 4 puts “#{year} 年には夏のオリンピックが開かれます。” 5 end 西暦 ÷ 4 の余り 1 # toshionna.rb 2 age= ARGV[0].to_i # 同様に年齢が12の倍数かどうか 3 if age % 12 != 0 then # を評価(倍数で無い場合 true) 4 puts “あなたは年女ではありません。” 5 end 年齢 ÷ 12 の余り
  • 20. 偶数・奇数判定 1 # oddeven.rb 2 n = ARGV[0].to_i 3 if n % 2 == 0 then 4 puts “#{n} は偶数です。” 5 else 6 puts “#{n} は奇数です。” 7 end
  • 21. 偶数・奇数判定 1 # oddeven.rb 2 n = ARGV[0].to_i 3 if n % 2 == 0 then 4 puts “#{n} は偶数です。” 5 else 6 puts “#{n} は奇数です。” 7 end 偶数なら2の倍数なので、n % 2 の結果が0の場合と それ以外(1の場合)で、偶数・奇数の判定が出来る
  • 23. 条件判断と集合 年齢を x (0から120)として、成人かどうか判断する 場合について、以下のように整理します。 【命題 A】 x は20以上である。 U  {x | 0,1,2,...,120} (全体集合) A  {20,21,22,...,120} 真 A  {0,1,2,...,19} 偽(補集合)
  • 24. 条件判断と集合 x U 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 if x >= 20 A # 成人向けの処理 20 21 22 23 24 25 ・・・ else A # それ以外の処理 ・・・117 118 119 120 end 【命題 A】 x は20以上である。
  • 26. 複合した論理式 まずは命題Aに対する論理式を与える。 【命題 A】 生まれ年が2000年以前である。 【命題 B】 トラ年の生まれである。 if x <= 2000
  • 27. 複合した論理式 次は命題Bに対する論理式を与える。 トラ年の生まれ年は12で割った余りが6になる。 【命題 A】 生まれ年が2000年以前である。 【命題 B】 トラ年の生まれである。 if x % 12 == 6
  • 28. ベン図 U A B
  • 29. ベン図 U A IV B A B 生まれが2000年以前でかつトラ年生まれの場合
  • 30. ベン図 U II A B A B 生まれが2000年以前かつトラ年生まれでない場合
  • 31. ベン図 U III A B A B 生まれが2000年以前でないかつトラ年生まれの場合
  • 32. ベン図 U I A B A B 生まれが2000年以前でないかつトラ年生まれでない場合
  • 33. ド・モルガンの定理 A B A  B  ( A  B) A B A  B  ( A  B) ド・モルガンの定理は上記の関係を示したもの
  • 34. プログラム文へ置き換え if x <= 2000 && x % 12 == 6 then # (IV) A B elsif x <= 2000 && x % 12 != 6 then # (II) A B elsif x > 2000 && x % 12 == 6 then # (III) A B else # (I) A B end
  • 35. 第3章まとめ • 3.1 if-elsif-else 構文 • 3.2 論理式と論理演算(子) • 3.3 case文を使った多重分岐 • 3.4 条件判断と集合