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

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

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

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

Q&A

1回答

149閲覧

繰り返しを用いて段階的に表示する方法(Ruby)

photographer18

総合スコア4

Ruby

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

0グッド

0クリップ

投稿2018/07/21 11:38

最終的に以下のような表記とするために、繰り返し表現を使って段階的な表示を行う。

%
%
%
%
%
%

%%
%
%
%
%
%%

%%%
%
%
%
%
%%%

%%%%
%
% 文
%  文
%
%%%%

 %%%%%%%%%%
% %
% 文字列1 %
% 文字列2 %
% %
%%%%%%%%%%

なお、文字列1と2はキーボードから入力したものとする。

発生している問題・エラーメッセージ

エラー自体は発生していませんが、以下の点の記述方法が分かりません。
1. 右側の記号の表示方法
2. キーボードから入力した文字列を段階的に表示する方法

該当のソースコード

*初心者のため全く参考にならないかとは思いますが、ご確認頂ければ幸いです。

/////
print("文字列を二つ入力してください\n")
print("文字列1:")
moji1 = gets.chomp
print("文字列2:")
moji2 = gets.chomp

mojiA = "Hi,", moji1, "is good!"
mojiB = moji2, "loves", moji1

above = 0
while above < 26
print("**")
above = above + 1
end

left = 0
while left < 5
print("*\n", "\n")
left = left + 1
end

right = 0
while right < 5
print("*\n", "\n")
right = right + 1
end

print(mojiA, "\n")
puts "\n"
print(mojiB, "\n")

right = 0
while right < 5
print("*\n", "\n")
right = right + 1
end

below = 0
while below < 26
print("**")
below = below + 1
end

/////

メッセージ

どうかアドバイスをよろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/07/21 14:30

3までは規則性あったのに4から意味不ですね。規則性のないものを繰り返しで出来るんですかね
photographer18

2018/07/21 23:20

説明が不足していてすみません。一定の間隔で段々と表示されていくので、規則性自体はあるのですが、それを全部記述すると長くなってしまうので一部中略しました。
guest

回答1

0

Rubyで複雑な文字列の画面出力を行うには、Cursesライブラリを使うのが正攻法でしょう。
https://docs.ruby-lang.org/ja/2.0.0/library/curses.html

※Cursesライブラリがインストールされていなければ、gem install cursesでインストールしてください。

「段階的な表示」が不要であれが以下のようにするとできます。

ruby

1require "curses" 2include Curses 3 4print "文字列を二つ入力してください\n" 5print "文字列1:" 6moji1 = gets.chomp 7print "文字列2:" 8moji2 = gets.chomp 9 10mojiA = "Hi, #{moji1} is good!" 11mojiB = "#{moji2} loves #{moji1}" 12 13if mojiA.size > mojiB.size 14 win_width = mojiA.size + 4 15else 16 win_width = mojiB.size + 4 17end 18 19init_screen 20 21begin 22 win = stdscr.subwin(6, win_width, 2, 2) 23 win.box("%", "%", "%") 24 win.setpos(2, 2) 25 win.addstr(mojiA) 26 win.setpos(3, 2) 27 win.addstr(mojiB) 28 win.refresh 29 getch 30ensure 31 close_screen 32end

「段階的な表示」を行うには、結局一文字ずつsetposとaddstrを使って出力しないといけないので、ちょっと大変そうですね…。

投稿2018/07/25 12:58

takahashim

総合スコア1877

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問