Newer
Older
Ruby / j2208_last.rb
@ABE Tessho ABE Tessho on 21 Jan 2023 5 KB 2023-01-21 14:42:48
#!/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