if文、配列のarray.index、getsを使った基本的な文を作ってみました。


print"(1〜6)の間で整数を入力してください"
array=[1,2,3,4,5,6]
num=gets.to_i
if 1<num && num<6
print "arrayclassの要素#{num}は"
print "#{array.index(num)}番目です"
elsif 1==num || 6==num
print "arrayclassの要素#{num}は"
print "#{array.index(num)}番目です"
else
print "[nil]"
end

 

以上です。

恐らく、もう少し短くできるかと思いますので、先生に確認してみます。

いつも見て下さり有難うございます。

エラーメセージについて記述

⭕️syntax errorについて  プログラムに文法的な間違いがあります。

特に括弧や文字列の閉じ忘れの場合、インタプリンタが報告してくる場所よりもずっと前の部分に間違いがあるのかもしれません。次の点を確認して下さい。

if,while,beginなどに対応するendがあるか?

・括弧や文字列はきちんと閉じているのか?

・ヒアドキュメントが閉じているか?

・配列やハッシュの要素の区切りを表す記号に謝りや抜けがないか?

演算子の使い方に謝りがないか?

 

 

”3”を累乗した時、一の位の整数を求める式を作ってみました。(if条件式、getstring、配列式arrayを使っています)

p "整数を入力して下さい"
num=gets.to_i
array=[1,3,9,7]
i=p 3**num
if num % 4==1
puts "3の#{num}乗の一の位の値は#{p array[1]}です"
elsif num % 4==2
puts "3の#{num}乗の一の位の値は#{p array[2]}です"
elsif num % 4==3
puts "3の#{num}乗の一の位の値は#{p array[3]}です"
elsif num % 4==0
puts "3の#{num}乗の一の位の値は#{p array[0]}です"
else
puts "no existence"
end

今日Rubyで習得したこと[条件式としての範囲式] 

:[ times ]メソッドを使って、条件式の中で用いる範囲式を書いていく。

まず、[ times ]メソッドの文法は

 

→  object . times {  |  変数  | 

          実行処理1  実行処理2

           end }                                  

                    このメソッドの主な概要は、[ 0 ]の数値         から「objが持つ数値−1」の数値まで順に、数値を代入しながら「 { 」~「 } 」の間の処理を実行する。一回処理が実行されると同時に、変数に代入される数値は1ずつ増加する。

 次に条件式の中で用いる範囲式の文法式については2つの式( ①『 . . 』,②『 . . . 』)が存在する。以下の通り。

  

   (文法式) 

     ① 式 1 ( 左辺 )' . . ' 式 2 ( 右辺 )   

     ② 式 1 ( 左辺 )   ' . . . ' 式 2 ( 右辺 ) 

 

この範囲式の概要はまず、

 ①の場合、『 ⑴ 初期状態では式 1 だけを評価し、式 1 が真を返すまでは false を返す。 ⑵ 式 1 が真を返すと true を返す。( この時に式 2 も真ならば初期状態に戻ることになる。)  ⑶ この後は式 2 だけを評価し、式 2 が真を返すまでは true を返し続ける。 ⑷ 式 2 が真を返すと時、 true を返し、初期状態に戻る。 』

 ②の場合については、上記①の式の⑵の (  ) の文言、処理が無くなるだけで、それ以外は一緒なので、省略します。

では、それぞれ①、②の違いを例題を用いて説明していきます。

 

問1)      5.times { | n | 

          if ( n == 2) . . ( n == 2 )

             p n 

          end }

 

   1 . times メソッドの原則から、変数 n に代入される数値の上限は、5−1より、4。

  つまり、変数 n には[ 0 ,1 , 2 , 3 , 4 ]の数値が順番に代入され処理されていくこに 

  なる。

 2 . まず評価される式はif文の条件式の左辺、上記範囲式の概要での式 1 にあたる式

       ( n == 2 )であり、数値2が代入されるまで false を返す。

 3 . 式1、左辺に2が代入されるとき真となり true を返し、pが出力され、2が返り値

  となる。

 4. 左辺と同一の式である右辺、式2も同時に真を返すことになり true を返し、初期状

  態に戻ることからここで式が終了となる。

 5. よってこの式の返り値は、2である。( 式①の説明終 )

 

問2)      5.times { | n | 

          if ( n == 2) . . . ( n == 2 )

             p n 

          end }

    1. 上記1と同じく変数 n に代入される数値は[ 0 ,1 , 2 , 3 , 4 ]の数値が順番に代入

  処理されていくこに なる。

 2 . まず評価される式はif文の条件式の左辺、上記範囲式の概要での式 1 にあたる式

       ( n == 2 )であり、数値2が代入されるまで false を返す。

 3 . 式1、左辺に2が代入されるとき真となり true を返し、pが出力され、2が返り値

  となる。

 4 . この時、上記の式①では右辺も真であれば 、初期状態になり終了していたが、

  式②では、左辺の式 1 が真、true を返したあとは、右辺の式 2 だけに着目する手段

  をとる。

 5 . つまり原則より、右辺の式 2 が真を返すまでは、trueを返し続けるた為、n==2よ

  り変数2が必要となるが、今回[ times ]メソッドを用いて処理をしていることから

  上限が決められており、今回は数値4までが変数 n に代入され処理実行される。

 6 . よって、原則より式 2 が真を返すまでは true を返すことにより、数値2の後にくる

  数値 3 ,4 ともに真とみなされ、true が返りpメソッドが出力、処理実行されること。

 7. 今回の本問における返り値は以上のことから、[ 2 , 3 , 4 ] が回答になる。

 

 

 

         

 

累乗についての式を作ってみました。7を累乗した時、一の位にくる数値をだす式です。

print"整数を入力して下さい”
num=gets.to_i
array=[1,7,9,3]
i=p 7**num
if num % 4==0
p "7**#{num}の一の位の数値は#{p array[0]}である"
elsif num % 4==1
p " 7**#{num}の一の位の数値は#{p array[1]}である"
elsif num % 4==2
p "7**#{num}の一の位の数値は#{p array[2]}である"
elsif num % 4==3
p "7**#{num}の一の位の整数は#{p array[3]}である"
else
print"no exist"
end

 

詳しい解説は、明日付け足します。