#!/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