Newer
Older
Ruby / keisans.rb
@HAYASAKA Shunto HAYASAKA Shunto on 5 Jan 1 KB 2026-01-05 13:37:40
#!/usr/bin/env ruby
# -*- coding:utf-8 -*-
puts "計算内容を+-*/を使って入力してください"
naiyou=gets.chomp
def numlen(str,i)
  j=0
  while str[i+j]!=")"    
    j+=1
  end
  j
end
def numload(str,i)
  j=""
  if str[i]=="("
    j=keisan("+","-",keisan("*","/",str[(i+1)..(str.length-1)]))
    len=numlen(str,i)+1
  else
    while str[i]!="+" && str[i]!="-" && str[i]!="*" && str[i]!="/" && str[i]!=nil && str[i]!=")"
      j+=str[i]
      i+=1
    end
    len=j.length
  end
  [j.to_f,len]
end
def keisan(a,b,n)
  i=0
  l="n"
  while i<n.length
    if n[i]==")"
      n=n[0..(i-1)]
      break
    elsif l=="n"
      num1=numload(n,i)
      i+=num1[1]
      l="t"
    elsif l=="t" && (n[i]==a || n[i]==b)
      l=n[i]
      i+=1
    elsif l=="t"
      i+=1
      l="n"
    else
      num2=numload(n,i)
      n2=""
      i-=1
      m=0
      num3=num1[0]
      num4=num2[0]
      while m<n.length
        if m<i-num1[1] || m>i+num2[1]
          n2+=n[m]
          m+=1
        else
          if l=="+"
            num3+=num4
          elsif l=="-"
            num3-=num4
          elsif l=="*"
            num3*=num4
          else
            num3/=num4
          end
          n2+=num3.to_s
          m+=num1[1]+num2[1]+1
        end
      end
      n=n2
      i-=num1[1]
      num1[0]=num3
      num1[1]=num3.to_s.length
      i+=num1[1]
      l="t"
    end
  end
  n
end
puts keisan("+","-",keisan("*","/",naiyou))
puts"この計算は税を含みますか?"
x = gets.chomp
if x == "はい"
  puts"税の額を記入願います。"
  zei = gets.to_f
  a/zei
  printf("%fです。\n")
else
  puts"では、さようなら。"
  end