#!/uar/bin/env ruby
# -*- coding: utf-8 -*-

puts "計算方法を選択してください"
while true                      # whileで計算のあとにすぐ選択に戻れるようにする
  puts"  "  
  puts "1:加法(足し算)"
  puts "2:減法(引き算)"
  puts "3:乗法(掛け算)"
  puts "4:除法(割り算)"
  puts "5:冪乗(xのy乗)"
  puts "6:剰余(余り)"
  puts "7:平方根(ルート√)"
  puts "8:最大公約数、最小公倍数"
  puts "9:素因数分解"
  puts "10:終了"
  print "計算方法を選択:"
  houhou = gets.chomp.to_i
  
  
  if houhou == 1                   
    def tasi(tasareru,tasu,ta)
      return tasareru+tasu+ta
    end
    
    print "足される数を入力してください:"
    suzi1 = gets.to_f
    print "足す数を入力してください:"
    suzi2 = gets.to_f
    print "足す数を入力してください:"
    suzi3 = gets.to_f
    printf("解答は%fです。\n",tasi(suzi1,suzi2,suzi3))
    sleep(1)
    redo
    
    
  elsif houhou == 2
    def hikizan(hikareru,hiku,hi)
      return hikareru-hiku-hi
    end
    
    print "引かれる数を入力してください:"
    suzi1 = gets.to_f
    print "引く数を入力してください:"
    suzi2 = gets.to_f
    print "引く数を入力してください:"
    suzi3 = gets.to_f
    printf("解答は%fです。\n",hikizan(suzi1,suzi2,suzi3))
    sleep(1)
    redo
    
    
  elsif houhou == 3
    def kake(kakerareru,kakeru,ka)
      return kakerareru*kakeru*ka
    end
    
    print "かけられる数を入力してください:"
    suzi1 = gets.to_f
    print "かける数を入力してください:"
    suzi2 = gets.to_f
    print "かける数を入力してください:"
    suzi3 = gets.to_f
    printf("解答は%fです。\n",kake(suzi1,suzi2,suzi3))
    sleep(1)
    redo
    
    
  elsif houhou == 4
    def zyohou(warareru,waru,wa)
      if waru < 0 && wa < 0
      elsif waru > 0 && wa < 0
      elsif waru < 0 && wa > 0
      elsif waru > 0 && wa > 0
      elsif waru == 0        # 割る数に0を入力したときには0で割れないようにする
        puts "0では割れないよ"
      end
      return warareru/waru/wa
    end
    
    print "割られる数を入力してください:"
    suzi1 = gets.to_f
    print "割る数を入力してください:"
    suzi2 = gets.to_f
    print "割る数を入力してください:"
    suzi3 = gets.to_f
    printf("解答は%fです。\n",zyohou(suzi1,suzi2,suzi3))
    sleep(1)
    redo
    
    
  elsif houhou == 5
    def bekijyou(no,jyou)
      return no**jyou
    end
    
    puts "xのy乗"
    print "xに入る数を入力してください:"
    suzi1 = gets.to_f
    print "yに入る数(指数)を入力してください:"
    suzi2 = gets.to_f
    printf("解答は%fです。\n",bekijyou(suzi1,suzi2))
    sleep(1)
    redo
    
    
  elsif houhou == 6
    def jyouyo(amari,dasu)
      if dasu < 0
      elsif dasu > 0
      elsif dasu == 0
        puts "0では割れないよ" # 割る数に0が入力されたときには0で割れないようにする
      end
      return amari%dasu
    end
    
    print "割られる数を入力してください:"
    suzi1 = gets.to_f
    print "割る数を入力してください:"
    suzi2 = gets.to_f
    printf("解答は%fです。\n",jyouyo(suzi1,suzi2))
    sleep(1)
    redo
    
    
  elsif houhou == 7
    def heihoukon(x)
      x ** 0.5                  # 0.5乗をして平方根を求める
    end
    
    print "ルートの中の数を入力してください:"
    y = gets.to_f
    printf("解答は%fです。\n",heihoukon(y))
    sleep(1)
    redo
    
    
  elsif houhou == 8
    def kouyaku(a,b)
      if a < b
        a,b = b,a     # 引数aがbよりも小さい場合、aをbに、bをaにそれぞれ代入する
      end
      while
        c = a % b     # aをbで割った余りをcに格納する
        if c == 0     # 余りがない場合
          return b    # bを返してループを完了させる
        end
        a,b = b,c     # 処理が続けば、bをaに、cをbに代入する
      end
    end
    
    print "1つ目の数を入力してください:"
    e = gets.to_f
    print "2つ目の数を入力してください:"
    f = gets.to_f
    printf("最大公約数は%fです。\n",kouyaku(e,f))
    def koubai(e,f)
      return e*f/kouyaku(e,f)        # 最小公倍数の取得に最大公約数を使う
    end
    printf("最小公倍数は%fです。\n",koubai(e,f))
    sleep(1)
    redo
    
    
  elsif houhou == 9
    print"数を入力してください:"
    require 'prime'
    x = gets.to_i
    print"結果は "
    factors = x.prime_division
    print factors
    print" です。\n"
    sleep(1)
    redo
    
    
  elsif houhou == 10             
    puts "計算を終わります。"
    sleep(0.3)
    break    # breakで計算を終える
    
    
  else                        # elseで1から10以外の回答を防ぐ
    puts "1から10で答えてください。"
    sleep(1)
    redo
  end
end
