#!/uar/bin/env ruby # -*- coding: utf-8 -*- puts "計算方法を選択してください" while true # whileで計算のあとにすぐ選択に戻れるようにする print" \n1:加法(足し算)\n2:減法(引き算)\n3:乗法(掛け算)\n4:除法(割り算)\n5:冪乗(xのy乗)\n6:最大公約数、最小公倍数\n7:終了\n計算方法を選択:" houhou = gets.chomp.to_i if houhou == 1 def tasi(tasareru,tasu) return tasareru+tasu end print "足される数を入力してください:" suzi1 = gets.to_f print "足す数を入力してください:" suzi2 = gets.to_f printf("解答は%fです。\n",tasi(suzi1,suzi2)) sleep(1) redo elsif houhou == 2 def hikizan(hikareru,hiku) return hikareru-hiku end print "引かれる数を入力してください:" suzi1 = gets.to_f print "引く数を入力してください:" suzi2 = gets.to_f printf("解答は%fです。\n",hikizan(suzi1,suzi2)) sleep(1) redo elsif houhou == 3 def kake(kakerareru,kakeru) return kakerareru*kakeru end print "かけられる数を入力してください:" suzi1 = gets.to_f print "かける数を入力してください:" suzi2 = gets.to_f printf("解答は%fです。\n",kake(suzi1,suzi2)) sleep(1) redo elsif houhou == 4 def zyohou(warareru,waru) if waru < 0 elsif waru > 0 elsif waru == 0 # 割る数に0を入力したときには0で割れないようにする puts "0では割れないよ" end return warareru/waru end print "割られる数を入力してください:" suzi1 = gets.to_f print "割る数を入力してください:" suzi2 = gets.to_f printf("解答は%fです。\n",zyohou(suzi1,suzi2)) sleep(1) redo elsif houhou == 5 def bekijyou(no,jyou) return no**jyou end print "xのy乗\nxに入る数を入力してください:" suzi1 = gets.to_f print "yに入る数(指数)を入力してください:" suzi2 = gets.to_f printf("解答は%fです。\n",bekijyou(suzi1,suzi2)) sleep(1) redo elsif houhou == 6 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 == 7 puts "計算を終わります" sleep(0.3) break # breakで計算を終える else # elseで1から9以外の回答を防ぐ puts "1から7で答えてください。" sleep(1) redo end end