質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

367閲覧

Rubyで入力された数値、演算子を元に、その演算結果を表示するプログラムを作成したい。

Eston

総合スコア67

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

1クリップ

投稿2018/02/16 07:42

編集2018/02/16 08:48

Rubyで入力された数値、演算子を元に、その演算結果を表示するプログラムを作成したいと考えております。
いわば電卓のようなものです。


例)
数値を入力> 1
演算子を入力(+ - * / =)> +
数値を入力> 2
演算子を入力(+ - * / =)> =
3
と、いうようなことをイメージしています。

現在はcase文を使った方法を模索しています(下のコード)。
ーーーーーーーーーーーーーーーーーーーーー
puts "数値を入力してください"
puts "演算子(+ - * / =)を入力してください"
enzan1 = gets.chomp
puts "数値を入力してください"
num2 = gets.to_i
puts "演算子(+ - * / =)を入力してください"
enzan2 = gets

ans1 = num1 + num2
ans2 = num1 - num2
ans3 = num1 * num2
ans4 = num1 / num2

case enzan1
when "+" then
puts ans1
when "-" then
puts ans2
when "*" then
puts ans3
when "/" then
puts ans4
else
puts "よくわかりません"
end
ーーーーーーーーーーーーーーーーーー
このコードだと、enzan2が=出なくても動いてしまうので、そこを改善したいのが一点
また、はじめにasn1~ans4までしか指定していないので、
より複雑な計算に対応できないことを改善する方法を考えています。

追記
私の質問が言葉足らずなところがあったので修正します。

計算が1+2*3の時は9になるようにしたいです。
また、二つ目の演算子は=ではなくても構いません、=が入力された時に最終計算結果を出力できるようにしたいと考えています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torisan

2018/02/16 08:05

『1+2×3』の答えは、 『9』と『7』、どちらを想定していますか?電卓的には『9』になりますが……。 それとも2つ目の記号は確実に『=』なのでしょうか?
Eston

2018/02/16 08:07

答えの結果は7を予想しています。また、二つ目の記号は=でなくても構いません。あくまで=が入力された時に最終計算結果を出せるようにしたいと考えております。
Eston

2018/02/16 08:48

やはり、7になる方は難しいとアドバイスがあったので、9なる方を目指して進めようと考えています。
guest

回答2

0

ベストアンサー

1+2*3が7になるようにすると、こんな感じですかね。

ruby

1stack = [] 20.step do |i| 3 if i.even? 4 print '数値を入力> ' 5 item = gets.chomp.to_i 6 if %w(* /).include?(stack.last) 7 x, op = stack.pop(2) 8 item = x.send(op, item) 9 end 10 else 11 print '演算子を入力(+ - * / =)> ' 12 item = gets.chomp 13 if item == '=' 14 r = stack.shift 15 stack.each_cons(2) do |op, x| 16 r = r.send(op, x) 17 end 18 puts r 19 break 20 end 21 end 22 stack.push(item) 23end

投稿2018/02/16 13:04

emasaka

総合スコア524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eston

2018/02/17 15:13

ありがとうございます。無事解決できました。 想定していたやり方で行き詰まっていたので、勉強になりました。
guest

0

入力の部分がおかしいのは修正ミスですかね。コードは実行した物をコピペしましょう。

エラー処理がない事を除けば概ね良いと思いますが、演算実行が早すぎます。
1 + 0 を行いたいときでも、0除算のエラーになります。
演算は、演算子を見てからやりましょう。

#追記

計算が1+2*3の時は9ではなく7を計算結果として考えています。

は、高度ですね。まずは電卓式で9になるプログラムを作ってからその次を考えましょう。

投稿2018/02/16 07:51

編集2018/02/16 08:36
otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eston

2018/02/16 07:56

失礼いたしました。 もう少し改善いたします。
Eston

2018/02/16 08:44

なるほど〜。 わかりました、9になる方を目指して進めてみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問