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

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

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

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

Q&A

解決済

2回答

970閲覧

*を並べて直角側が左下の二等辺三角形を作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

1クリップ

投稿2020/03/11 02:26

編集2020/03/11 02:33

Ruby

1print "左下直角の二等辺三角形を表示します" 2print "段数は" 3n = gets.to_i 4i = 1 5j = 1 6while i <= n 7 i += 1 8 while j <= i 9 print "*" 10 j += 1 11 end 12 puts 13end

nが5の場合コンソール上に

html

1* 2** 3*** 4**** 5*****

と表示したいが
このコードの場合

  1. i < nの場合iは+1され2になる
  2. j <= iの間繰り返され*が表示される

3.jはj <= iの間+1される
4.putsで改行される

html

1** 2* 3* 4* 5* 6

と表示されてしまいます

※説明のところが自分の頭を整理するためにちぐはぐになってしまい申し訳ないです
※Markdown記法がわからずコンソール上の動きの部分はhtmlを使いました

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

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

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

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

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

hoshi-takanori

2020/03/11 02:39

ヒント: j を初期化する位置はそれでいいか、よく考えてみましょう。
退会済みユーザー

退会済みユーザー

2020/03/11 02:44

ヒントありがとうございます! トライします<(_ _)>
退会済みユーザー

退会済みユーザー

2020/03/11 06:16

ありがとうございます<(_ _)> jを初期する場所を間違っていました! ヒントの出し方が学びやすく助かりました!
guest

回答2

0

print "何個*を表示しますか?" n = gets.to_i (n+1).times { |i| puts '*' * i }

入力
5
出力
何個*を表示しますか?

* ** *** **** *****

timesでもできました…

参考
Integer#times (Ruby 2.7.0 リファレンスマニュアル)
https://docs.ruby-lang.org/ja/latest/method/Integer/i/times.html
"times {|n| ... } -> self[permalink][rdoc]
times -> Enumerator
self 回だけ繰り返します。 self が正の整数でない場合は何もしません。

またブロックパラメータには 0 から self - 1 までの数値が渡されます。"

投稿2020/03/11 04:45

DrqYuto

総合スコア432

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

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

退会済みユーザー

退会済みユーザー

2020/03/11 06:22

"またブロックパラメータには 0 から self - 1 までの数値が渡されます" そのため(n+1)をしているという理解でいいでしょうか?<(_ _)>
Mugheart

2020/03/11 07:12

このコードだと最初に不要な出力があるので、やるなら n.times { |i| puts '*' * (i+1) } ですかね。
退会済みユーザー

退会済みユーザー

2020/03/11 07:14

ありがとうございます<(_ _)> 少し頭が爆発しました! 書いてみます!
DrqYuto

2020/03/11 08:56

Mughertさん なるほど…ありがとうございます!
guest

0

ベストアンサー

i += 1するタイミングが早すぎます。
jの値を加算した後、リセットされていないので次周も加算された後の値を引き継いでいます。

修正すると以下のような感じでしょうか...。

rb

1print "左下直角の二等辺三角形を表示します" 2print "段数は" 3n = gets.to_i 4i = 1 5while i <= n 6 j = 1 7 while j <= i 8 print "*" 9 j += 1 10 end 11 puts 12 i += 1 13end

rb

1(1..n).each { |i| puts '*' * i }

で良さそう...。

投稿2020/03/11 02:41

Mugheart

総合スコア2340

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

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

退会済みユーザー

退会済みユーザー

2020/03/11 02:46

ありがとうございます<(_ _)> 1つ目のコードは理解できました! 2つ目の鬼短い式がどうなってるのかは本見ながらゆっくり考えます!
Mugheart

2020/03/11 02:48

本を参考にしているのであれば2つ目のコードは忘れてください。 順を追って学んでいくと良いです。頑張ってください。
退会済みユーザー

退会済みユーザー

2020/03/11 06:27

ありがとうございます<(_ _)> 短い方のコードを自分で書いてみた結果わかりました! iには1からnの値が順番に入って*にiをかけて表示させてると理解しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問