#!/uar/bin/env ruby # -*- coding: utf-8 -*- #このプログラムは、数学の問題をするときに暗算ができなかったり、答え合わせが難し #かったりする人や、数学かRubyプログラムに興味がある人のためのプログラムです。僕 #も好きな数学の勉強を効率よく、スムーズに行ってほしい、そして、数学が好きな人はRu #byプログラムに、プログラムができる人は算数・数学にも興味を持ってもらいたいとい #う思いからこのプログラムを作りました。実装した機能は、四則演算の計算、冪乗の計 #算、最大公約数・最小公倍数の算出です。中間発表でチームで発表した電卓のプログラ #ムをレベルアップさせたプログラムで、計算方法を増やし、四則演算の計算で打ち込め #る数を3つにしました。最大公約数・最小公倍数の算出は古代ギリシャの数学者"ユーグ #リット"によって発見された、ユーグリットの互助法を用いたので特に力を入れた部分で #す。逆に、実装したかった機能は、平方根の計算や、平均の計算で、プログラム部分が10 #0行までという制限があり、その制限に収めることができなかったこともあって、プログ #ラムに入れることができませんでした。今後、プログラムをもっと学んで行き、より短 #く、より高性能な、質の高いプログラムを作りたいです。 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,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)) 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)) 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)) 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)) 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)) 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)) redo elsif houhou == 7 puts "計算を終わります\n \n" break # breakで計算を終える else # elseで1から9以外の回答を防ぐ puts "1から7で答えてください。" redo end end