SlideShare a Scribd company logo
1 of 33
Download to read offline
アルゴリズムとデータ構造

  2011.11.25(WEB用)
今日の内容

• 3.1   if を用いた構文
• 3.2   論理式と論理演算
第3章:条件判断
• プログラムをもっとプログラムっぽくするには条件に
  応じて異なる処理をし、結果を出力するようなことが
  求められる。

• ここでは if 文や論理演算子を使った、ちょっと複雑
  な条件判断を学習していきます。
if 文を使った制御
1   # if1.rb
2   # 最も簡単な条件判断
3   str = ARGV[0]
4   n = str.to_i
5   if n > 10 then
6      puts “#{n} は 10 より大きい”
7   end
8   puts “おわり”


    まずはこのスクリプトを作成してください。
    6行めの puts の前は [TAB] キーを入力して
    字下げしてください。
if1.rb 解説
1   # if1.rb
2   # 最も簡単な条件判断
3   str = ARGV[0]
4   n = str.to_i
5   if n > 10 then
6      puts “#{n} は 10 より大きい”
7   end
8   puts “おわり”


    まず最初に引数から値を受け取り(3行目)
    それを整数値に変換して n に代入(4行目)
if1.rb 解説
1   # if1.rb
2   # 最も簡単な条件判断
3   str = ARGV[0]
4   n = str.to_i    Yes
5   if n > 10 then
6      puts “#{n} は 10 より大きい”
7   end
8   puts “おわり”


    if文で n の値が10より大きいか評価(5行目)
    もしそうであれば6行目が実行され、7行目で
    終了、8行目と続く
if1.rb 解説
1   # if1.rb
2   # 最も簡単な条件判断
3   str = ARGV[0]
4   n = str.to_i    No
5   if n > 10 then
6      puts “#{n} は 10 より大きい”
7   end
8   puts “おわり”


    n の値が 10 より小さければ6行目は実行されず
    (何も起こらず)8行目へ飛ぶ
if1.rb 解説
1   # if1.rb
2   # 最も簡単な条件判断
3   str = ARGV[0]
4   n = str.to_i
5   if n > 10 then
6      puts “#{n} は 10 より大きい”
7   end
8   puts “おわり”


    ちなみにif-end文と処理部分(if ブロック)がわかり
    やすいように、6行目を [TAB] で字下げしました
    これをインデントと言います
if 文を使った制御2
1   # if2.rb
2   # else で場合分け
3   n = ARGV[0].to_i
4   if n > 10 then
5      puts “#{n} は 10 より大きい”
6   else
7      puts “#{n} は 10 より大きくありません.”
8   end
9   puts “おわり”
if2.rb 解説
1   # if2.rb
2   # else で場合分け
3   n = ARGV[0].to_i
4   if n > 10 then
5      puts “#{n} は 10 より大きい”
6   else
7      puts “#{n} は 10 より大きくありません.”
8   end
9   puts “おわり”
    ここでは if 文の条件に合わなかった場合、「それ以
    外」として else文以下で処理しています
if2.rb 解説
1   # if2.rb
2   # else で場合分け
3   n = ARGV[0].to_i
4   if n > 10 then
5      puts “#{n} は 10 より大きい”
6   else
7      puts “#{n} は 10 より大きくありません.”
8   end
9   puts “おわり”
    これは単純に
              If A then do XX, else do YY
              という英文章を表しているに過ぎません
if 文を使った制御2
1   # if2.rb
2   # else で場合分け
3   n = ARGV[0].to_i
4   if n > 10 then
5      puts “#{n} は 10 より大きい”
6   else
7      puts “#{n} は 10 より大きくありません.”
8   end
9   puts “おわり”
    ちなみに3行目で引数の読み込みと整数変換を
    同時に行っています。Rubyではこのように複数の
    処理を1行内に連続して記述することが出来ます
if 文を使った制御3
 1   # if3.rb
 2   # elsif で細かい場合分け
 3   str = ARGV[0]
 4   n = str.to_i
 5   if n < 10 then
 6      puts “#{n} は 10 より小さい.”
 7   elsif n == 10 then
 8      puts “#{n} はちょうど 10 です.”
 9   elsif n < 20 then
10      puts “#{n} は10 より大きく 20 未満です.”
11   else
12      puts “#{n} は それ以外です.”
13   end
if 文を使った制御3
 1   # if3.rb
 2   # elsif で細かい場合分け
 3   str = ARGV[0]
 4   n = str.to_i
 5   if n < 10 then                      if X
 6      puts “#{n} は 10 より小さい.”            ~
 7   elsif n == 10 then                  elsif Y
 8      puts “#{n} はちょうど 10 です.”           ~
 9   elsif n < 20 then                   elsif Z
10      puts “#{n} は10 より大きく 20 未満です.”     ~
11   else                                else
12      puts “#{n} は それ以外です.”              ~
13   end                                 end
if 文を使った制御3
 1   # if3.rb
 2   # elsif で細かい場合分け            条件評価は上から順に
 3   str = ARGV[0]               行われ、条件に合わな
 4   n = str.to_i                い限り、下に進んでいく
 5   if n < 10 then
 6      puts “#{n} は 10 より小さい.”
 7   elsif n == 10 then
 8      puts “#{n} はちょうど 10 です.”
 9   elsif n < 20 then
10      puts “#{n} は10 より大きく 20 未満です.”
11   else
12      puts “#{n} は それ以外です.”
13   end
if 文を使った制御3
 1   # if3.rb
 2   # elsif で細かい場合分け               n = 15 の場合
 3   str = ARGV[0]
 4   n = str.to_i     false         10より小さくも10ちょうど
 5   if n < 10 then                 でもないので5, 7 行目は
 6      puts “#{n} は 10 false
                            より小さい.” falseを返す
 7   elsif n == 10 then
 8      puts “#{n} はちょうど 10 です.”
 9   elsif n < 20 then
10      puts “#{n} は10 より大きく 20 未満です.”
11   else
12      puts “#{n} は それ以外です.”
13   end
if 文を使った制御3
 1   # if3.rb
 2   # elsif で細かい場合分け               n = 15 の場合
 3   str = ARGV[0]
 4   n = str.to_i     false         20よりも小さいという条件
 5   if n < 10 then                 を満たすので9行目が true
 6      puts “#{n} は 10 false
                            より小さい.” と評価され10行目の
 7   elsif n == 10 then             処理に入る
 8      puts “#{n} はちょうど 10 です.”
                           true
 9   elsif n < 20 then
10      puts “#{n} は10 より大きく 20 未満です.”
11   else
12      puts “#{n} は それ以外です.”
13   end
if 文を使った制御3
 1   # if3.rb
 2   # elsif で細かい場合分け            条件式において「等しい」
 3   str = ARGV[0]               かどうか評価するには
 4   n = str.to_i                ただの “=“ ではなく ”==“
 5   if n < 10 then              (ダブルイコール)を使う
 6      puts “#{n} は 10 より小さい.”
 7   elsif n == 10 then
 8      puts “#{n} はちょうど 10 です.”
 9   elsif n < 20 then
10      puts “#{n} は10 より大きく 20 未満です.”
11   else
12      puts “#{n} は それ以外です.”
13   end
論理式と論理値

age = ARGV[0].to_i
if n < 10 then
   puts “お子さまですね。”
end
論理式と論理値

           true(真)
age = ARGV[0].to_i
if n < 10 then       # n = 5 の時
   puts “お子さまですね。”
end


“n は10より小さいか?” という式に対して
true(真)という値が返される
論理式と論理値

           false(偽)
age = ARGV[0].to_i
if n < 10 then        # n = 11 の時
   puts “お子さまですね。”
end


“n は10より小さいか?” という式に対して
false(偽)という値が返される
論理式と論理値
true(真)
    or
false(偽)
      age = ARGV[0].to_i
      if n < 10 then
         puts “お子さまですね。”
      end


      true もしくは false の二値を論理値と呼び、
      評価結果として論理値を返す式のことを
      論理式と言う
論理式と論理値
比較演算子

age = ARGV[0].to_i
if n < 10 then
   puts “お子さまですね。”
end


論理式で使われる演算子は論理演算子と呼ばれ
特に2つのデータを比較する論理演算子は
比較演算子と言う
比較演算子一覧
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 以下
比較演算子一覧
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 以下

プログラム内でa = b と記述すると代入式になるので注意!
比較演算子一覧
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 以下

!記号(エクスクラメーション)は否定演算子とも呼ばれる
比較演算子一覧
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
• テキスト43ページの問題3-1で、

- もしも年齢差が15以上の場合には、「年の差がありますね.」
- 上記のいずれでもない場合には、「お幸せに.」と出力する


 の2通りだけ判別するプログラムを作成しなさい
 (ただし、男性のほうが年上と仮定する)。
解答例
 # marriage.rb
 m_age = ARGV[0].to_i
 f_age = ARGV[1].to_i
 diff = m_age – f_age
 if diff > 15 then
    puts “年の差がありますね.”
 else
    puts “お幸せに.”
 end
これ例では、男性の方が年上なら常に差は正の整数になるが、
女性の方が年上の場合は負の整数になり、15歳以上年齢差が
     あっても「お幸せに.」と出力されてしまう。
解答例(絶対数を使う)
# marriage.rb
m_age = ARGV[0].to_i
f_age = ARGV[1].to_i
diff = m_age – f_age
if diff.abs > 15 then
   puts “年の差がありますね.”
else
   puts “お幸せに.”
end
年齢差を絶対数に変換すると、女性の方が年上の場合にも
 対応できる。 .abs は数値を絶対数に変換するメソッド。
練習問題 2
• 練習問題1で作成したプログラムでは、日本の法的
  に問題のある解答をしてしまう可能性があります ^^;)
  次に、年齢制限を設けるために

- もしも男性の年齢が18未満、または女性の年齢が16未満で
  あった場合には、「結婚出来ません.」と出力する


 という条件を足して改良しなさい。
解答例
 # marriage.rb
 m_age = ARGV[0].to_i
 f_age = ARGV[1].to_i
 diff = m_age – f_age
 if m_age < 18
    puts “結婚できません.”
 elsif f_age < 16
    puts “結婚できません.”
 elsif diff.abs > 15 then
    puts “年の差がありますね.”
 else
    puts “お幸せに.”
 end

         条件式の順番に注意。
最初に年齢チェックを行い、その後に年齢差をチェックしている。
間違った例
 # marriage.rb
 m_age = ARGV[0].to_i
 f_age = ARGV[1].to_i
                    true
 diff = m_age – f_age
 if diff.abs > 15 then
    puts “年の差がありますね.”      → true だと、ここで終了
 elsif m_age < 18
    puts “結婚できません.”
 elsif f_age < 16
    puts “結婚できません.”
 else
    puts “お幸せに.”
 end

最初に年齢差チェックの条件式をもってくると、18未満・16未満に
 関わらず、「年の差がありますね.」とおせっかいを出すだけで
        結婚を容認してしまうことになる。

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

2011年11月25日

  • 2. 今日の内容 • 3.1 if を用いた構文 • 3.2 論理式と論理演算
  • 3. 第3章:条件判断 • プログラムをもっとプログラムっぽくするには条件に 応じて異なる処理をし、結果を出力するようなことが 求められる。 • ここでは if 文や論理演算子を使った、ちょっと複雑 な条件判断を学習していきます。
  • 4. if 文を使った制御 1 # if1.rb 2 # 最も簡単な条件判断 3 str = ARGV[0] 4 n = str.to_i 5 if n > 10 then 6 puts “#{n} は 10 より大きい” 7 end 8 puts “おわり” まずはこのスクリプトを作成してください。 6行めの puts の前は [TAB] キーを入力して 字下げしてください。
  • 5. if1.rb 解説 1 # if1.rb 2 # 最も簡単な条件判断 3 str = ARGV[0] 4 n = str.to_i 5 if n > 10 then 6 puts “#{n} は 10 より大きい” 7 end 8 puts “おわり” まず最初に引数から値を受け取り(3行目) それを整数値に変換して n に代入(4行目)
  • 6. if1.rb 解説 1 # if1.rb 2 # 最も簡単な条件判断 3 str = ARGV[0] 4 n = str.to_i Yes 5 if n > 10 then 6 puts “#{n} は 10 より大きい” 7 end 8 puts “おわり” if文で n の値が10より大きいか評価(5行目) もしそうであれば6行目が実行され、7行目で 終了、8行目と続く
  • 7. if1.rb 解説 1 # if1.rb 2 # 最も簡単な条件判断 3 str = ARGV[0] 4 n = str.to_i No 5 if n > 10 then 6 puts “#{n} は 10 より大きい” 7 end 8 puts “おわり” n の値が 10 より小さければ6行目は実行されず (何も起こらず)8行目へ飛ぶ
  • 8. if1.rb 解説 1 # if1.rb 2 # 最も簡単な条件判断 3 str = ARGV[0] 4 n = str.to_i 5 if n > 10 then 6 puts “#{n} は 10 より大きい” 7 end 8 puts “おわり” ちなみにif-end文と処理部分(if ブロック)がわかり やすいように、6行目を [TAB] で字下げしました これをインデントと言います
  • 9. if 文を使った制御2 1 # if2.rb 2 # else で場合分け 3 n = ARGV[0].to_i 4 if n > 10 then 5 puts “#{n} は 10 より大きい” 6 else 7 puts “#{n} は 10 より大きくありません.” 8 end 9 puts “おわり”
  • 10. if2.rb 解説 1 # if2.rb 2 # else で場合分け 3 n = ARGV[0].to_i 4 if n > 10 then 5 puts “#{n} は 10 より大きい” 6 else 7 puts “#{n} は 10 より大きくありません.” 8 end 9 puts “おわり” ここでは if 文の条件に合わなかった場合、「それ以 外」として else文以下で処理しています
  • 11. if2.rb 解説 1 # if2.rb 2 # else で場合分け 3 n = ARGV[0].to_i 4 if n > 10 then 5 puts “#{n} は 10 より大きい” 6 else 7 puts “#{n} は 10 より大きくありません.” 8 end 9 puts “おわり” これは単純に If A then do XX, else do YY という英文章を表しているに過ぎません
  • 12. if 文を使った制御2 1 # if2.rb 2 # else で場合分け 3 n = ARGV[0].to_i 4 if n > 10 then 5 puts “#{n} は 10 より大きい” 6 else 7 puts “#{n} は 10 より大きくありません.” 8 end 9 puts “おわり” ちなみに3行目で引数の読み込みと整数変換を 同時に行っています。Rubyではこのように複数の 処理を1行内に連続して記述することが出来ます
  • 13. if 文を使った制御3 1 # if3.rb 2 # elsif で細かい場合分け 3 str = ARGV[0] 4 n = str.to_i 5 if n < 10 then 6 puts “#{n} は 10 より小さい.” 7 elsif n == 10 then 8 puts “#{n} はちょうど 10 です.” 9 elsif n < 20 then 10 puts “#{n} は10 より大きく 20 未満です.” 11 else 12 puts “#{n} は それ以外です.” 13 end
  • 14. if 文を使った制御3 1 # if3.rb 2 # elsif で細かい場合分け 3 str = ARGV[0] 4 n = str.to_i 5 if n < 10 then if X 6 puts “#{n} は 10 より小さい.” ~ 7 elsif n == 10 then elsif Y 8 puts “#{n} はちょうど 10 です.” ~ 9 elsif n < 20 then elsif Z 10 puts “#{n} は10 より大きく 20 未満です.” ~ 11 else else 12 puts “#{n} は それ以外です.” ~ 13 end end
  • 15. if 文を使った制御3 1 # if3.rb 2 # elsif で細かい場合分け 条件評価は上から順に 3 str = ARGV[0] 行われ、条件に合わな 4 n = str.to_i い限り、下に進んでいく 5 if n < 10 then 6 puts “#{n} は 10 より小さい.” 7 elsif n == 10 then 8 puts “#{n} はちょうど 10 です.” 9 elsif n < 20 then 10 puts “#{n} は10 より大きく 20 未満です.” 11 else 12 puts “#{n} は それ以外です.” 13 end
  • 16. if 文を使った制御3 1 # if3.rb 2 # elsif で細かい場合分け n = 15 の場合 3 str = ARGV[0] 4 n = str.to_i false 10より小さくも10ちょうど 5 if n < 10 then でもないので5, 7 行目は 6 puts “#{n} は 10 false より小さい.” falseを返す 7 elsif n == 10 then 8 puts “#{n} はちょうど 10 です.” 9 elsif n < 20 then 10 puts “#{n} は10 より大きく 20 未満です.” 11 else 12 puts “#{n} は それ以外です.” 13 end
  • 17. if 文を使った制御3 1 # if3.rb 2 # elsif で細かい場合分け n = 15 の場合 3 str = ARGV[0] 4 n = str.to_i false 20よりも小さいという条件 5 if n < 10 then を満たすので9行目が true 6 puts “#{n} は 10 false より小さい.” と評価され10行目の 7 elsif n == 10 then 処理に入る 8 puts “#{n} はちょうど 10 です.” true 9 elsif n < 20 then 10 puts “#{n} は10 より大きく 20 未満です.” 11 else 12 puts “#{n} は それ以外です.” 13 end
  • 18. if 文を使った制御3 1 # if3.rb 2 # elsif で細かい場合分け 条件式において「等しい」 3 str = ARGV[0] かどうか評価するには 4 n = str.to_i ただの “=“ ではなく ”==“ 5 if n < 10 then (ダブルイコール)を使う 6 puts “#{n} は 10 より小さい.” 7 elsif n == 10 then 8 puts “#{n} はちょうど 10 です.” 9 elsif n < 20 then 10 puts “#{n} は10 より大きく 20 未満です.” 11 else 12 puts “#{n} は それ以外です.” 13 end
  • 19. 論理式と論理値 age = ARGV[0].to_i if n < 10 then puts “お子さまですね。” end
  • 20. 論理式と論理値 true(真) age = ARGV[0].to_i if n < 10 then # n = 5 の時 puts “お子さまですね。” end “n は10より小さいか?” という式に対して true(真)という値が返される
  • 21. 論理式と論理値 false(偽) age = ARGV[0].to_i if n < 10 then # n = 11 の時 puts “お子さまですね。” end “n は10より小さいか?” という式に対して false(偽)という値が返される
  • 22. 論理式と論理値 true(真) or false(偽) age = ARGV[0].to_i if n < 10 then puts “お子さまですね。” end true もしくは false の二値を論理値と呼び、 評価結果として論理値を返す式のことを 論理式と言う
  • 23. 論理式と論理値 比較演算子 age = ARGV[0].to_i if n < 10 then puts “お子さまですね。” end 論理式で使われる演算子は論理演算子と呼ばれ 特に2つのデータを比較する論理演算子は 比較演算子と言う
  • 24. 比較演算子一覧 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 以下
  • 25. 比較演算子一覧 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 以下 プログラム内でa = b と記述すると代入式になるので注意!
  • 26. 比較演算子一覧 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 以下 !記号(エクスクラメーション)は否定演算子とも呼ばれる
  • 27. 比較演算子一覧 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 以下 以上・以下の比較演算子は不等号(>か<)、等号(=)の順 (逆だとエラーになるので注意)
  • 28. 練習問題 1 • テキスト43ページの問題3-1で、 - もしも年齢差が15以上の場合には、「年の差がありますね.」 - 上記のいずれでもない場合には、「お幸せに.」と出力する の2通りだけ判別するプログラムを作成しなさい (ただし、男性のほうが年上と仮定する)。
  • 29. 解答例 # marriage.rb m_age = ARGV[0].to_i f_age = ARGV[1].to_i diff = m_age – f_age if diff > 15 then puts “年の差がありますね.” else puts “お幸せに.” end これ例では、男性の方が年上なら常に差は正の整数になるが、 女性の方が年上の場合は負の整数になり、15歳以上年齢差が あっても「お幸せに.」と出力されてしまう。
  • 30. 解答例(絶対数を使う) # marriage.rb m_age = ARGV[0].to_i f_age = ARGV[1].to_i diff = m_age – f_age if diff.abs > 15 then puts “年の差がありますね.” else puts “お幸せに.” end 年齢差を絶対数に変換すると、女性の方が年上の場合にも 対応できる。 .abs は数値を絶対数に変換するメソッド。
  • 31. 練習問題 2 • 練習問題1で作成したプログラムでは、日本の法的 に問題のある解答をしてしまう可能性があります ^^;) 次に、年齢制限を設けるために - もしも男性の年齢が18未満、または女性の年齢が16未満で あった場合には、「結婚出来ません.」と出力する という条件を足して改良しなさい。
  • 32. 解答例 # marriage.rb m_age = ARGV[0].to_i f_age = ARGV[1].to_i diff = m_age – f_age if m_age < 18 puts “結婚できません.” elsif f_age < 16 puts “結婚できません.” elsif diff.abs > 15 then puts “年の差がありますね.” else puts “お幸せに.” end 条件式の順番に注意。 最初に年齢チェックを行い、その後に年齢差をチェックしている。
  • 33. 間違った例 # marriage.rb m_age = ARGV[0].to_i f_age = ARGV[1].to_i true diff = m_age – f_age if diff.abs > 15 then puts “年の差がありますね.” → true だと、ここで終了 elsif m_age < 18 puts “結婚できません.” elsif f_age < 16 puts “結婚できません.” else puts “お幸せに.” end 最初に年齢差チェックの条件式をもってくると、18未満・16未満に 関わらず、「年の差がありますね.」とおせっかいを出すだけで 結婚を容認してしまうことになる。