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

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

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

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

Q&A

解決済

2回答

724閲覧

整数を左右にシフトした値が2のべき乗での乗算や除算と等しくなることを求めるプログラムを作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

1クリップ

投稿2020/04/26 06:37

僕のコード

Ruby

1class ShiftValue 2 3 #2のn乗を返却 4 no = 0 5 def pow2(no) 6 pw = 1 7 8 while no > 0 9 pw *= 2 10 end 11 return pw 12 end 13 14 puts "整数xをnビットシフトします" 15 print "x : " 16 x = gets.to_i 17 print "n : " 18 n = gets.to_i 19 20 m_power = x * pow2(n) 21 d_power = x / pow2(n) 22 23 l_shift = x << n 24 r_shift = x >> n 25 26 printf("[a] x × (2の%d乗) = %d\n", n, m_power) 27 printf("[b] x ÷ (2の%d乗) = %d\n", n, d_power) 28 printf("[c] x << %d = %d\n", n, l_shift) 29 printf("[d] x >> %d = %d\n", n, r_shift) 30 31 puts "aとcの値は一致します" 32 puts "bとdの値は一致します" 33end

理想の出力結果

整数xをnビットシフトします x : 100(キーボードから打ち込む) n : 3 (キーボードから打ち込む) [a] x × (2の3乗) = 800 [b] x ÷ (2の3乗) = 12 [c] x << 3 = 800 [d] x >> 3 = 12 [a]と[c]の値は一致します [b]と[d]の値は一致します

という風にしたいのですが僕のコードだと

7-11.rb:20:in <class:ShiftValue>': undefined method pow2' for ShiftValue:Class (NoMethodError)
というエラーが出ます

pow2メソッドの定義がミスってるのはわかるのですがどうしたらいいかわかりません

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

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

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

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

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

guest

回答2

0

x.rb

ruby

1def pow2(num) 2 if num == 0 3 pw = 1 4 elsif num > 0 5 pw = 2 6 (1...num).each { |_i| pw *= 2 } 7 else 8 pw = 1.0 9 (num..-1).each { |_i| pw /= 2 } 10 end 11 pw 12end 13 14puts '整数xをnビットシフトします' 15print 'x : ' 16x = gets.to_i 17print 'n : ' 18n = gets.to_i 19 20m_power = (x * pow2(n)).to_i 21d_power = (x / pow2(n)).to_i 22 23l_shift = x << n 24r_shift = x >> n 25 26puts("[a] x × (2の#{n}乗) = #{m_power}") 27puts("[b] x ÷ (2の#{n}乗) = #{d_power}") 28puts("[c] x << #{n} = #{l_shift}") 29puts("[d] x >> #{n} = #{r_shift}") 30 31puts 'aとcの値は一致します' if m_power == l_shift 32puts 'bとdの値は一致します' if d_power == r_shift

実行例
イメージ説明

投稿2020/04/27 22:12

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2020/04/28 02:05

ありがとうございます????
guest

0

ベストアンサー

まず、先頭のclass ShiftValueと最後のendを削除します。
クラスを使うのはクラスの意味を理解してからにしましょう。

あとは、pow2の中でno -= 1が漏れています。

投稿2020/04/26 11:30

otn

総合スコア84798

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問